Message Queue vs Message Bus - Was sind die Unterschiede?

95

Und gibt es welche? Für mich kennt MB sowohl Abonnenten als auch Herausgeber und fungiert als Vermittler, der Abonnenten über neue Nachrichten informiert (praktisch ein "Push" -Modell). MQ hingegen ist eher ein "Pull" -Modell, bei dem Verbraucher Nachrichten aus einer Warteschlange ziehen.

Bin ich hier völlig aus der Bahn geraten?

Anton Gogolev
quelle

Antworten:

47

Im Großen und Ganzen werden Softwareprodukte von Anbietern austauschbar verwendet und weisen nicht die von Ihnen beschriebenen starken Unterschiede in Bezug auf Push oder Pull auf.

Der BUS vs. QUEUE ist in der Tat ein altes Konzept, das zuletzt aus Systemen wie IBM MQ und Tibco Rendezvous stammt. MQ war ursprünglich ein 1: 1-System, in der Tat eine Warteschlange zum Entkoppeln verschiedener Systeme.

Im Gegensatz dazu war Tibco (als) Messaging-Backbone verkauft, bei dem Sie mehrere Publisher und Abonnenten zu denselben Themen haben konnten.

Beide (und neuere Konkurrenzprodukte) können heutzutage im Raum des anderen spielen. Beide können so eingestellt werden, dass sie unterbrochen werden und nach neuen Nachrichten abgefragt werden. Beide vermitteln die Wechselwirkungen zwischen verschiedenen Systemen.

Der Ausdruck Nachrichtenwarteschlange wird jedoch auch für interne Intra-Thread-Nachrichtenpumpen und dergleichen verwendet, und in diesem Zusammenhang ist die Verwendung in der Tat unterschiedlich. Wenn Sie an die klassische Windows-Nachrichtenpumpe denken, ist dies zwar eher das von Ihnen beschriebene Pull-Modell, aber es ist wirklich mehr Intra-App als Inter-App oder Inter-Box.

sdg
quelle
113

Nachrichtenbus

Ein Nachrichtenbus ist eine Nachrichteninfrastruktur, mit der verschiedene Systeme über einen gemeinsamen Satz von Schnittstellen ( Nachrichtenbus ) kommunizieren können .

Geben Sie hier die Bildbeschreibung ein

Quelle: EIP

Nachrichtenwarteschlange

Die Grundidee einer Nachrichtenwarteschlange ist einfach:

  • Zwei (oder mehr) Prozesse können Informationen über den Zugriff auf eine gemeinsame Systemnachrichtenwarteschlange austauschen .

  • Der Sendeprozess platziert über ein (OS) Nachrichtenübermittlungsmodul eine Nachricht in einer Warteschlange, die von einem anderen Prozess gelesen werden kann

Quelle: Dave Marshall

Geben Sie hier die Bildbeschreibung ein

Bildquelle

Unterschied

Die Nachrichtenwarteschlange enthält die FIFO- Regel ( first in first out ), während dies im Nachrichtenbus nicht der Fall ist.

Fazit

Beide sehen so aus, als würden sie dieselbe Art von Arbeit erledigen - Nachrichten zwischen zwei Anwendungen oder Modulen oder Schnittstellen oder Systemen oder Prozessen weitergeben , mit Ausnahme eines kleinen Unterschieds zwischen FIFO

Vijay
quelle
4
Nicht unbedingt wahr, in einigen Warteschlangen können Sie Nachrichten überspringen. Obwohl dies im Allgemeinen eine wirklich gute Möglichkeit ist, zwischen beiden zu unterscheiden.
Tom
21
Normalerweise fügen Sie Credits hinzu, wenn Sie Text und Bilder von irgendwoher aufnehmen. Ich habe Quellen hinzugefügt.
Jgauffin
25

Die Grenzen zwischen diesen beiden Konzepten sind verschwommen, da einige Produkte jetzt Funktionen unterstützen, die zuvor nur zu der einen oder anderen Kategorie gehörten (z. B. unterstützt Azure Service Bus beide Ansätze).

WARTESCHLANGE

Eine Nachrichtenwarteschlange empfängt Nachrichten von einer Anwendung und stellt sie einer oder mehreren anderen Anwendungen auf FIFO-Weise (First-In-First-Out) zur Verfügung. In vielen Architekturszenarien können, wenn Anwendung A Aktualisierungen oder Befehle an Anwendungen B und C senden muss, separate Nachrichtenwarteschlangen für B und C eingerichtet werden. A würde separate Nachrichten in jede Warteschlange schreiben und jede abhängige Anwendung würde aus ihrer Warteschlange lesen eigene Warteschlange (die Nachricht wird entfernt, wenn sie aus der Warteschlange entfernt wird). Weder B noch C müssen verfügbar sein, damit A Aktualisierungen senden kann. Jede Nachrichtenwarteschlange ist dauerhaft. Wenn eine Anwendung neu gestartet wird, wird sie aus ihrer Warteschlange gezogen, sobald sie wieder online ist. Dies hilft, Abhängigkeiten zwischen abhängigen Systemen zu lösen, und kann Anwendungen eine größere Skalierbarkeit und Fehlertoleranz bieten.

BUS

Ein Nachrichtenbus oder Servicebus bietet einer (oder mehreren) Anwendung die Möglichkeit, Nachrichten an eine oder mehrere andere Anwendungen zu übermitteln. Es gibt möglicherweise keine Garantie für eine First-In-First-Out-Bestellung, und Teilnehmer des Busses können ohne Wissen der Absender von Nachrichten kommen und gehen. Somit könnte eine Anwendung A geschrieben werden, um Statusaktualisierungen über einen Nachrichtenbus an Anwendung B zu übermitteln. Später wird Anwendung C geschrieben, die ebenfalls von diesen Updates profitieren kann. Anwendung C kann so konfiguriert werden, dass sie den Nachrichtenbus abhört und auch basierend auf diesen Aktualisierungen Maßnahmen ergreift, ohne dass eine Aktualisierung der Anwendung A erforderlich ist. Im Gegensatz zu Warteschlangen, bei denen die sendende Anwendung jeder Warteschlange explizit Nachrichten hinzufügt, verwendet ein Nachrichtenbus ein Publish / Modell abonnieren. Nachrichten werden auf dem Bus veröffentlicht, und jede Anwendung, die diese Art von Nachricht abonniert hat, empfängt sie.

QUELLE

Jibran
quelle
15

Der Hauptunterschied, der in den anderen Antworten nicht explizit erwähnt wurde, besteht darin, dass ein Nachrichtenbus mehrere Teilnehmer zulässt, während eine Warteschlange Elemente nacheinander für alles in die Warteschlange stellt, was die Warteschlange abhört. Wenn Sie möchten, dass mehrere Listener dieselben Elemente aus der Warteschlange sehen, müssen Sie dies selbst erledigen. Ein Servicebus erledigt dies sofort für Sie.

Matt
quelle
1
Zumindest nicht mehr ganz richtig. Dienste wie Amazon SQS ermöglichen das Lesen derselben Nachricht durch mehrere Leser. Der Zeitraum der "Unsichtbarkeit" ist konfigurierbar. Viele Warteschlangensysteme verfügen über solche Funktionen - ebenso wie Wiederholungsversuche und Warteschlangen für nicht zustellbare Nachrichten.
Tom
2
@ Tom OP erwähnte keine spezifischen Produkte, daher denke ich, dass er versucht, die Terminologie und Konzepte zu verstehen. Zu diesem Zweck fand ich diese Antwort nützlich und wahr. Auch wenn es stimmt, dass Anbieter Hybridprodukte basierend auf beiden Konzepten erstellen , denke ich, dass die Terminologie immer noch gültig und nützlich ist.
mindplay.dk
4

Ich sehe es so, dass die Nachrichtenwarteschlange den Nachrichtenbus erstellt . Clients (dh Knoten) können dann den Nachrichtenbus abhören. Dies gilt insbesondere für den Fall, dass ein MQ Nachrichten über UDP sendet, dh Nachrichten an eine Broadcast- / Multicast-Adresse sendet, ohne zu wissen oder sich darum zu kümmern, wer sie erhalten wird. Eine ausführlichere Beschreibung dieses Szenarios finden Sie in diesem Artikel .

rdalmeida
quelle
0

Service Bus ist ein allgemeinerer Begriff als eine Nachrichtenwarteschlange.

MQ ist ein einfaches FIFO, aber es gibt ausgefeiltere Möglichkeiten, einen Service Bus zu implementieren, dh einen Event Hub, der ein riesiges "Zentrum" für die Manipulation der Nachrichten darstellt. Neben den von MQ bereitgestellten Funktionen können die Nachrichten gespeichert werden (und somit mehrere Abonnenten verwendet werden)

Novellizator
quelle
0

Ein Nachrichtenbus ist ein 1-zu-viele-Verteilungsmodell. Das Ziel in diesem Modell wird normalerweise als Thema oder Thema bezeichnet. 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 für verteiltes Rechnen vorstellen. Einige Nachrichtenbusanbieter 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 Nachrichtenwarteschlange 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 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