wake-up-neo.com

JMS und AMQP - RabbitMQ

Ich versuche zu verstehen, was JMS 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 bzw. 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. Was ist dann das Standardprotokoll, das hier anstelle von AMQP verwendet wird?

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

116
Kevin Rave

Ihre Frage ist etwas chaotisch und ähnelt einer schwierigen Frage in einem Fragebogen :) (Da die Lehrer immer versuchen, einfache Fragen zu stellen, die komplex werden: D 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 Java Message Oriented Middleware (MOM) -API zum Senden von Nachrichten zwischen zwei oder mehr Clients. JMS ist Teil der Java Platform, Enterprise Edition, und wird durch eine Spezifikation definiert, die im Rahmen des Java Community Process als JSR 914 entwickelt wurde. Dies ist ein Messaging-Standard Ermöglicht Anwendungskomponenten, die auf der Java Enterprise Edition (Java EE) basieren, Nachrichten zu erstellen, zu senden, zu empfangen und zu lesen. Es ermöglicht die lose Kopplung, Zuverlässigkeit und Asynchronität der Kommunikation zwischen verschiedenen Komponenten einer verteilten Anwendung..

Jetzt (aus Wikipedia ):

Das Advanced Message Queuing-Protokoll (AMQP) ist ein offenes Standardprotokoll auf Anwendungsebene für nachrichtenorientierte Middleware. Die Hauptmerkmale von AMQP sind Nachrichtenorientierung, Warteschlangen, Routing (einschließlich Punkt-zu-Punkt- und Publish-and-Subscribe), Zuverlässigkeit und Sicherheit.

Und das Wichtigste (nochmal aus Wikipedia):

Im Gegensatz zu JMS, das lediglich eine API definiert, ist AMQP ein Protokoll auf Leitungsebene. Ein Wire-Level-Protokoll ist eine Beschreibung des Formats der Daten, die als Oktett-Stream über das Netzwerk gesendet werden. Folglich kann jedes Tool, das Nachrichten erstellen und interpretieren kann, die diesem Datenformat entsprechen, mit jedem anderen kompatiblen Tool unabhängig von der Implementierungssprache 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 macht also keinen Sinn zu sagen, dass das Standardprotokoll von JMS ist. Natürlich verwenden Clientanwendungen HTTP/S als Verbindungsprotokoll, wenn Sie einen WebLogic-Webdienst aufrufen.
  3. JMS ist nur eine API-Spezifikation. Es wird kein Protokoll verwendet. Ein JMS-Anbieter (wie ActiveMQ) kann jedes zugrunde liegende 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 :)

99
Freak

Beginnen wir von der Basis.

RabbitMQ ist eine MOM (Message Oriented Middleware), entwickelt mit Erlang (einer TLC-orientierten Programmiersprache) und Implementierung des Wire-Protokolls AMQP (Advance Message Queuing Protocol). 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 ein Satz strukturierter APIs definiert, das von einem MOM implementiert werden soll. Ein Beispiel für MOM, das die JMS-APIs implementiert (d. H. Damit 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 seinen Java Client APIs, ist es demnach möglich, eine JMS-Implementierung unter Verwendung von RabbitMQ zu entwickeln: das einzige, was man tun muss do implementiert zu diesem Zeitpunkt das Austauschmuster (über RabbitMQ) gemäß der JMS-Spezifikation.

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

38
Paolo Maresca

JMS hat, als es definiert wurde, kein Protokoll zwischen dem JMS-Client und einem Nachrichtenserver definiert. Der JMS-Client, der die JMS-API implementiert, kann jedes Protokoll zur Kommunikation mit dem Nachrichtenserver verwenden. Der Client muss nur mit der JMS-API kompatibel sein. Das ist alles. Üblicherweise verwenden JMS-Clients ein benutzerdefiniertes Protokoll, das der Nachrichtenserver 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 Nachrichtenserver verwenden. Und es gibt solche Kunden.

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

14
chitakasa
  • 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 mit einem anderen AMQP-Client kommunizieren können.

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

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

2
Axel Podehl

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. Dank dieser Eigenschaft können Bibliotheken in vielen Sprachen geschrieben und auf mehreren Betriebssystemen und CPU-Architekturen ausgeführt werden, 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 AMQP, JMS stellt keine Anforderung für die Bildung und Übertragung von Nachrichten dar. Grundsätzlich kann jeder JMS-Broker die Nachrichten in einem anderen Format implementieren. Er muss lediglich dieselbe API verwenden.

0
gstackoverflow