Frage

I''m derzeit mit einer Anwendung twiddling, die eine Einrichtung stimmen mit der folgenden Chat-Analogie hat:

  • ein Chat ist ein Objekt, das im Speicher gehalten und enthält eine Liste von Chat Nachrichten
  • ein Chat ist in mehrere Browser-Fenstern und Updates gemacht sind zog in mit a4j: push

Die programmatische Setup sieht wie folgt aus: eine Instanz eines Chat-Objekt mit ihm Nachrichten ist zwischen PAGE scoped Naht Komponente in verschiedenen Sitzungen gemeinsam genutzt wird. Wenn nun alle Sitzungs Beiträge eine neue Nachricht, das heißt das Chat-Objekt ändern, sollten alle Naht Komponenten der neuen Nachricht informiert werden, so dass der neue Staat auf die Benutzeroberfläche auf allen Clients weitergeleitet werden kann.

kann ich denke an drei Möglichkeiten, dies zu erreichen:

  1. Seam-Veranstaltungen mit der Chat-ID als Parameter und prüfen dann jede Komponente die ID und entweder Updates oder ignorieren die Nachricht
  2. JMS Queues oder ein JMS-Thema, wo jede Komponente listenes auf mit einem Filter für nur, dass es im Chat
  3. ein reiner Java-Listener-Mechanismus in dem Chat-Objekt geteilt wird, das heißt jedes Naht Komponentenregister, um es und die Benachrichtigung ist rein und direkte Java

Für die Zwecke der Beweisführung übernehmen die Zahl der Chat ist groß (Zehntausende) und die Anzahl der Chat-Teilnehmer klein ist (mal 2-10 sagen).

Wie funktioniert jede Skala Leistung klug? Haben Sie noch andere Vorschläge, wie diese mit Naht machen und effektiv ist?

Wie ich es sehe, (1) würde integriert und sauber, aber schließlich würden Sie Zehntausende von Komponenten benachrichtigen, an denen nur wenige sie wirklich benötigen. So wird es wahrscheinlich nicht skaliert werden.

(2) würde integriert und hängt nur von der Leistung der JMS-Provider (die ausgetauscht werden können) und auch in einer Cluster-Umgebung ohne Änderungen funktionieren würde. Ich bin mir nicht sicher über die Leistung von JMS hier, das heißt es ein paar hundert Nachrichten pro Sekunde und tausend Zuhörer mit verschiedenen Filtern viel oder nicht?

(3) wäre schnell, da nur die benötigten Komponenten benachrichtigt werden würden, und die Benachrichtigung ist rein und direkt java. Allerdings Gleichzeitigkeit / Zugriffsprobleme auftreten können, weil etwas Quer Sitzungs- / Komponente / Thread durchgeführt wird.

(1) und (3) eine Lösung, das Clustering unterstützt würde manuell hinzugefügt werden, wenn zu einem bestimmten Zeitpunkt erforderlich ist.

War es hilfreich?

Lösung

Ich würde empfehlen, 2). Ich würde auch empfehlen JMS aus der Gleichung heraus schneiden - auch wenn es Ihnen ermöglicht, Messaging-Anbietern wechseln wird es auch von der Nutzung der erweiterten Funktionen des Messagingsystems verhindern Sie. Wenn Sie eine Oracle-Datenbank AQ würde eine vernünftige Wahl (es JMS btw unterstützt.). Ansonsten würde ich empfehlen, AMQP mit denen durch JBoss Messaging oder eine Dritte Lösung wie RabbitMQ .

Da Sie eindeutig ein Messaging-Problem haben Sie für die Verwendung einer Messaging-Lösung entscheiden sollten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top