JMS-Thema gegen Warteschlangen

191

Ich habe mich gefragt, was der Unterschied zwischen einer JMS-Warteschlange und einem JMS-Thema ist.

ActiveMQ-Seite sagt

Themen

In JMS implementiert ein Thema die Veröffentlichungs- und Abonnementsemantik . Wenn Sie eine Nachricht veröffentlichen, geht sie an alle interessierten Abonnenten. Daher erhalten null bis viele Abonnenten eine Kopie der Nachricht. Nur Abonnenten, die zum Zeitpunkt des Empfangs der Nachricht durch den Broker ein aktives Abonnement hatten, erhalten eine Kopie der Nachricht.

Warteschlangen

Eine JMS-Warteschlange implementiert die Semantik des Lastenausgleichs . Eine einzelne Nachricht wird von genau einem Verbraucher empfangen. Wenn zum Zeitpunkt des Sendens der Nachricht keine Verbraucher verfügbar sind, wird diese aufbewahrt, bis ein Verbraucher verfügbar ist, der die Nachricht verarbeiten kann. Wenn ein Verbraucher eine Nachricht empfängt und diese vor dem Schließen nicht bestätigt, wird die Nachricht an einen anderen Verbraucher erneut zugestellt. Eine Warteschlange kann viele Verbraucher mit Nachrichten haben ausgewogen Last auf die verfügbaren Verbraucher.

Ich möchte "etwas" haben, das eine Kopie der Nachricht an jeden Abonnenten in derselben Reihenfolge sendet, in der die Nachricht vom ActiveMQ-Broker empfangen wurde.

Irgendwelche Gedanken?

Poliquin
quelle

Antworten:

146

Das heißt, ein Thema ist angemessen. Eine Warteschlange bedeutet, dass eine Nachricht an einen und nur einen möglichen Teilnehmer geht. Ein Thema geht an jeden Abonnenten.

Joseph Ottinger
quelle
4
Irgendeine Idee, wie der Lastausgleich für die Warteschlangen in JMS oder WSO2 MB funktioniert?
Kulasangar
Das ist interessant, weil ich versucht habe, einen Abonnenten zu debuggen, und beim Senden eines Themas wurde der Abonnent nicht angerufen, aber beim Senden an die Warteschlange hat es funktioniert
vmrvictor
54

Die Themen beziehen sich auf das Publisher-Subscriber-Modell, die Warteschlangen auf Punkt-zu-Punkt.

Vikram
quelle
29

Ein JMS-Thema ist die Art des Ziels in einem 1-zu-viele-Verteilungsmodell. Die gleiche veröffentlichte Nachricht wird von allen konsumierenden Abonnenten empfangen . Sie können dies auch als "Broadcast" -Modell bezeichnen. Sie können sich ein Thema als Äquivalent eines Themas in einem Observer-Entwurfsmuster vorstellen für verteiltes Rechnen vorstellen. Einige JMS-Anbieter entscheiden sich effizient dafür, dies als UDP anstelle von TCP zu implementieren. Bei Themen lautet die Nachrichtenübermittlung "Feuer und Vergessen". Wenn niemand zuhört, verschwindet die Nachricht einfach. Wenn Sie dies nicht möchten, können Sie dauerhafte Abonnements verwenden.

Eine JMS-Warteschlange ist ein 1: 1-Ziel für Nachrichten. Die Nachricht wird nur von einem der konsumierenden Empfänger empfangen (bitte beachten Sie: Durch die konsequente Verwendung von Abonnenten für Themen-Clients und Empfängern für Warteschlangen-Clients wird Verwirrung vermieden). An eine Warteschlange gesendete Nachrichten werden auf der Festplatte oder im Speicher gespeichert, bis jemand sie aufnimmt oder sie abläuft. Warteschlangen (und dauerhafte Abonnements) benötigen also eine aktive Speicherverwaltung. Sie müssen über langsame Verbraucher nachdenken.

In den meisten Umgebungen sind Themen die bessere Wahl, da Sie jederzeit zusätzliche Komponenten hinzufügen können, ohne die Architektur ändern zu müssen. Hinzugefügte Komponenten können Überwachung, Protokollierung, Analyse usw. sein. Zu Beginn des Projekts wissen Sie nie, wie die Anforderungen in 1 Jahr, 5 Jahren, 10 Jahren aussehen werden. Veränderung ist unvermeidlich, nimm sie an :-)

Axel Podehl
quelle
26

So einfach ist das:

Warteschlangen = Einfügen> Zurückziehen (an einen einzelnen Teilnehmer senden) 1: 1

Themen = Einfügen> Broadcast (an alle Abonnenten senden) 1: n

Geben Sie hier die Bildbeschreibung ein

Daniel Perník
quelle
2
Ein Beispiel kann ein einfaches soziales Netzwerk sein. Jemand 'mag' einen Beitrag. Das Backend veröffentlicht ein 'POST LIKE'-Ereignis zum Thema. Es wird von 3 Abonnenten konsumiert: notificationProcessor(sendet eine Benachrichtigung an das Poster), karmaProcessor(gibt dem Liker und dem Poster Karma), feedProcessor(bewegt sich in den Feeds der Leute nach oben). Alles natürlich asynchron.
Siddhartha
@Siddhartha, dies könnte eine Antwort sein, die in ein Beispiel eingepackt ist, danke!
Selem Mn
8

Informationen zur Auftragserhaltung finden Sie auf dieser ActiveMQ-Seite . Kurz gesagt: Die Bestellung bleibt für einzelne Verbraucher erhalten, bei mehreren Verbrauchern ist die Reihenfolge der Lieferung jedoch nicht garantiert.

eebbesen
quelle
7

Warteschlangen

Vorteile

  • Einfaches Messaging-Muster mit transparentem Kommunikationsfluss
  • Nachrichten können wiederhergestellt werden, indem sie wieder in die Warteschlange gestellt werden

Nachteile

  • Nur ein Verbraucher kann die Nachricht erhalten
  • Impliziert eine Kopplung zwischen Produzent und Konsument, da es sich um eine Eins-zu-Eins-Beziehung handelt

Themen

Vorteile

  • Mehrere Verbraucher können eine Nachricht erhalten
  • Entkopplung zwischen Produzent und Konsument (Publish-and-Subscribe-Muster)

Nachteile

  • Komplizierterer Kommunikationsfluss
  • Eine Nachricht kann nicht für einen einzelnen Listener wiederhergestellt werden
abhimanyu
quelle
4

Wenn Sie N Verbraucher haben, dann:

JMS-Themen liefern Nachrichten an N von N JMS-Warteschlangen liefern Nachrichten an 1 von N.

Sie sagten, Sie möchten "ein" Ding "haben, das eine Kopie der Nachricht an jeden Abonnenten in derselben Reihenfolge sendet, in der die Nachricht vom ActiveMQ-Broker empfangen wurde."

Sie möchten also ein Thema verwenden, damit alle N Abonnenten eine Kopie der Nachricht erhalten.

Hans Jespersen
quelle
1

THEMA :: Thema ist eins zu viele Kommunikation ... (Mehrpunkt oder veröffentlichen / abonnieren) EX: - Stellen Sie sich vor, ein Verlag veröffentlicht den Film im youtub, dann erhalten alle Abonnenten eine Benachrichtigung .... QUEVE :: queve ist eins zu eins -eine Kommunikation ... Beispiel: -Wenn Sie eine Aufladeanforderung veröffentlichen, wird diese nur an einen Q-Empfänger gesendet. Denken Sie immer daran, dass bei einer Anfrage an alle Q-Empfänger mehrere Aufladungen durchgeführt wurden, während Sie eine Analyse entwickelten, die für eine Anwendung geeignet ist

Siddartha Kamble
quelle
-1

Die Warteschlange ist ein von JMS verwaltetes Objekt, das zum Speichern von Nachrichten verwendet wird, die darauf warten, dass Abonnenten sie verwenden. Wenn alle Abonnenten die Nachricht konsumiert haben, wird die Nachricht aus der Warteschlange entfernt.

Das Thema ist, dass alle Abonnenten eines Themas dieselbe Nachricht erhalten, wenn die Nachricht veröffentlicht wird.

Geetha reddy Manukonda
quelle
2
Warteschlangennachrichten werden nur einmal von einer einzelnen Person verwendet Verbraucher verwendet. Aus diesem Grund implementiert eine Warteschlange einen Load Balancer. Themenabonnements können dauerhaft sein : Der Abonnent kann die Nachricht lange nach der Veröffentlichung empfangen (wenn der Abonnent beispielsweise heruntergefahren wurde und erneut auftaucht).
Gruber