JMS und AMQP - RabbitMQ


132

Ich versuche zu verstehen, was JMS ist und wie es mit der AMQP-Terminologie verbunden ist. Ich weiß, dass JMS eine API und AMQP ein Protokoll ist.

Hier sind meine Annahmen (und auch Fragen)

  • RabbitMQ verwendet das AMQP-Protokoll (implementiert eher das AMQP-Protokoll)
  • Java-Clients müssen AMQP-Protokoll-Client-Bibliotheken verwenden, um RabbitMQ zu verbinden / zu verwenden
  • Wo kommt hier die JMS-API ins Spiel? Die JMS-API sollte AMQP-Clientbibliotheken verwenden, um eine Verbindung zu RabbitMQ herzustellen.
  • Normalerweise verwenden wir JMS, um Nachrichtenbroker wie RabbitMQ, ActiveMQ usw. zu verbinden. Welches Standardprotokoll wird dann hier anstelle von AMQP verwendet?

Einige der oben genannten können dumm sein. :-) Aber ich versuche meinen Kopf darum zu wickeln.


3
@ KevinRave: Die ausgewählte Antwort ist in einigen wichtigen Punkten falsch. Ich habe einen Kommentar hinzugefügt, damit Sie ihn ansehen können.
2020

@ KevinRave Ich habe die Antwort bearbeitet. Jetzt wurde der kontroverse Teil ersetzt. Jetzt ist die ganze Antwort vollkommen in Ordnung
Freak

Ich weiß nicht, wer meine Antwort bearbeitet und diesen falschen Punkt angegeben hat, der bei Nummer 3 war. Weil ich bereits gefragt habe, was Kevin unter Punkt 2 sagt. Lesen Sie immer sorgfältig, bevor Sie abstimmen oder Vorschläge machen
Freak

1
Schauen Sie sich den Abschnitt JMS in diesem Artikel an. Es hat eine sehr detaillierte Erklärung saipraveenblog.wordpress.com/2014/12/08/…
java_geek

Antworten:


118

Ihre Frage ist etwas chaotisch und ähnelt einer schwierigen Frage in einem Fragenpapier :) (Da Lehrer immer versuchen, einfache Fragen zu stellen, die komplex werden: Ich hoffe, Sie sind kein Lehrer :)) Lassen Sie uns alle diese Fragen einzeln betrachten.

Wie du weißt:

Die Java Message Service (JMS) -API ist eine MOM-API (Java Message Oriented Middleware) zum Senden von Nachrichten zwischen zwei oder mehr Clients . JMS ist Teil der Java-Plattform Enterprise Edition und wird durch eine Spezifikation definiert, die im Rahmen des Java Community Process als JSR 914 entwickelt wurde. Es handelt sich um einen Messaging-Standard, mit dem Anwendungskomponenten auf Basis der Java Enterprise Edition (Java EE) erstellt werden können. Nachrichten senden, empfangen und lesen. Dadurch kann die Kommunikation zwischen verschiedenen Komponenten einer verteilten Anwendung lose gekoppelt, zuverlässig und asynchron sein .

Jetzt (aus Wikipedia ):

Das Advanced Message Queuing Protocol (AMQP) ist ein offenes Standardprotokoll der Anwendungsschicht für nachrichtenorientierte Middleware. Die bestimmenden Merkmale von AMQP sind Nachrichtenorientierung, Warteschlange, Routing (einschließlich Punkt-zu-Punkt- und Publish-and-Subscribe), Zuverlässigkeit und Sicherheit.

Und das Wichtigste (wieder aus Wikipedia):

Im Gegensatz zu JMS, das lediglich eine API definiert, ist AMQP ein Protokoll auf Wire-Ebene. Ein Wire-Level-Protokoll beschreibt das Format der Daten, die als Oktettstrom über das Netzwerk gesendet werden. Folglich kann jedes Tool, das Nachrichten erstellen und interpretieren kann, die diesem Datenformat entsprechen, unabhängig von der Implementierungssprache mit jedem anderen kompatiblen Tool zusammenarbeiten

Einige wichtige Dinge, die Sie wissen sollten:

  1. Beachten Sie, dass AMQP eine Messaging-Technologie ist, die die JMS-API nicht implementiert.
  2. JMS ist API und AMQP ist ein Protokoll. Es ist also nicht sinnvoll zu sagen, dass das Standardprotokoll von JMS, natürlich verwenden Clientanwendungen HTTP / S als Verbindungsprotokoll, wenn ein WebLogic-Webdienst aufgerufen wird.
  3. JMS ist nur eine API-Spezifikation. Es wird kein Protokoll verwendet. Ein JMS-Anbieter (wie ActiveMQ) kann ein beliebiges zugrunde liegendes Protokoll verwenden, um die JMS-API zu realisieren. Zum Beispiel: Apache ActiveMQ kann eines der folgenden Protokolle verwenden: AMQP, MQTT, OpenWire, REST (HTTP), RSS und Atom, Stomp, WSIF, WS-Benachrichtigung, XMPP. Ich schlage vor, Sie lesen Verwenden von JMS-Transport als Verbindungsprotokoll .

Viel Glück :)


20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP: Nein. Das ist nicht richtig. JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.: Nein. Das ist nicht richtig. JMS ist nur eine API-Spezifikation. Es wird kein Protokoll verwendet. Ein JMS-Anbieter (wie ActiveMQ) kann ein beliebiges zugrunde liegendes Protokoll verwenden, um die JMS-API zu realisieren. Zum Beispiel: Apache ActiveMQ kann eines der folgenden Protokolle verwenden: AMQP, MQTT, OpenWire, REST (HTTP), RSS und Atom, Stomp, WSIF, WS-Benachrichtigung, XMPP.
2020

Ich habe die Antwort bearbeitet. Jetzt wurde der umstrittene Teil ersetzt.
Freak

1
@brainOverflow Ich weiß nicht, wer meine Antwort bearbeitet und diesen falschen Punkt angegeben hat, der bei Nummer 3 lag. Ich habe die Sache, die Sie unter Punkt 2 sagen, gefragt. Lesen Sie sie immer sorgfältig durch, bevor Sie abstimmen oder Vorschläge machen
Freak

Ich habe bereits Inhalte aus diesem PDF hinzugefügt, damit Sie auch zu einigen anderen Links gehen können
Freak

43

Beginnen wir mit der Basis.

RabbitMQ ist eine MOM (Message Oriented Middleware), die mit Erlang (einer TLC-orientierten Programmiersprache) entwickelt wurde und das Drahtprotokoll AMQP (Advance Message Queuing Protocol) implementiert . Derzeit sind viele Client-APIs (z. B. Java, C ++, RESTful usw.) verfügbar, um die Verwendung von RabbitMQ-Messaging-Diensten zu ermöglichen.

JMS (Java Messaging Service) ist ein JCP-Standard, der eine Reihe strukturierter APIs definiert , die von einer MOM implementiert werden sollen. Ein Beispiel für MOM, das die JMS-APIs implementiert (dh mit diesen kompatibel ist), ist ActiveMQ. Es gibt auch HornetMQ und andere. Solche Middlewares erhalten die JMS-APIs und implementieren die Austauschmuster entsprechend.

Ausgehend von dem Grundgerüst der JMS-APIs, einer Instanz von RabbitMQ und seiner Java-Client-APIs, ist es möglich, eine JMS-Implementierung unter Verwendung von RabbitMQ zu entwickeln: Das einzige, was zu diesem Zeitpunkt getan werden muss, ist die Implementierung der Austauschmuster (über RabbitMQ) gemäß der JMS-Spezifikation.

Der Schlüssel ist: Eine Reihe von APIs wie JMS kann unabhängig von der Technologie implementiert werden (in diesem Fall RabbitMQ).


Wofür steht TLC?
mvmn

@mvmm TLC steht für Telecommunication. Bitte werfen Sie einen Blick auf [1]. [1] allacronyms.com/TLC/Telecommunication
Paolo Maresca

15

Als JMS definiert wurde, wurde kein Protokoll zwischen dem JMS-Client und einem Messaging-Server definiert. Der JMS-Client, der die JMS-API implementiert, kann ein beliebiges Protokoll für die Kommunikation mit dem Messaging-Server verwenden. Der Client muss nur mit der JMS-API kompatibel sein. Das ist alles. Normalerweise verwenden JMS-Clients ein benutzerdefiniertes Protokoll, das ihr Messaging-Server versteht.

AMQP hingegen ist ein Protokoll zwischen einem Messaging-Client und einem Messaging-Server. Ein JMS-Client kann AMQP als Protokoll für die Kommunikation mit dem Messaging-Server verwenden. Und es gibt solche Kunden.

http://www.lshift.net/blog/2009/03/16/openamqs-jms-client-with-rabbitmq-server


2
  • Wo kommt hier die JMS-API ins Spiel? Die JMS-API sollte AMQP-Clientbibliotheken verwenden, um eine Verbindung zu RabbitMQ herzustellen.

JMS ist eine API, daher werden einige JMS-APIs über das AMQP-Protokoll implementiert (wie Apache QPID JMS ), während die meisten JMS-APIs andere Protokolle verwenden. Wenn die Version des AMQP-Protokolls identisch ist, sollte ein solcher Client in der Lage sein, mit einem anderen AMQP-Client zu kommunizieren.

  • Normalerweise verwenden wir JMS, um Nachrichtenbroker wie RabbitMQ, ActiveMQ usw. zu verbinden. Welches Standardprotokoll wird dann hier anstelle von AMQP verwendet?

Dies hängt von Ihrer Konfiguration dieser JMS-API ab. Für ActiveMQ könnte es AMQP sein, aber standardmäßig ist es "openwire".



0

https://spring.io/understanding/AMQP

AMQP (Advanced Message Queuing Protocol) ist eine offen veröffentlichte Kabelspezifikation für asynchrones Messaging. Jedes Byte der übertragenen Daten wird angegeben. Diese Eigenschaft ermöglicht es, Bibliotheken in vielen Sprachen zu schreiben und auf mehreren Betriebssystemen und CPU-Architekturen auszuführen, was zu einem wirklich interoperablen, plattformübergreifenden Messaging-Standard führt.

AMQP wird häufig mit JMS (Java Message Service) verglichen, dem in der Java-Community am häufigsten verwendeten Messaging-System. Eine Einschränkung von JMS besteht darin, dass die APIs angegeben werden, das Nachrichtenformat jedoch nicht. Im Gegensatz zu AMQP ist für JMS nicht erforderlich, wie Nachrichten gebildet und übertragen werden. Grundsätzlich kann jeder JMS-Broker die Nachrichten in einem anderen Format implementieren. Sie müssen nur dieselbe API verwenden.


-1

Ich vermute, Sie suchen nach dieser Dokumentation , in der zum Teil steht:

JMS-Client für vFabric RabbitMQ ist eine Client-Bibliothek für vFabric RabbitMQ. vFabric RabbitMQ ist kein JMS-Anbieter, verfügt jedoch über Funktionen, die zur Unterstützung der Messaging-Modelle JMS Queue und Topic erforderlich sind. Der JMS-Client für RabbitMQ implementiert die JMS 1.1-Spezifikation über der RabbitMQ-Java-Client-API und ermöglicht so neuen und vorhandenen JMS-Anwendungen die Verbindung mit RabbitMQ-Brokern über das AMQP (Advanced Message Queuing Protocol).


Nee. Es ist nicht das, was ich mir angesehen habe. Aber ähnlich.
Kevin Rave
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.