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.
Antworten:
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 ):
Und das Wichtigste (wieder aus Wikipedia):
Einige wichtige Dinge, die Sie wissen sollten:
Viel Glück :)
quelle
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.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).
quelle
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
quelle
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.
Dies hängt von Ihrer Konfiguration dieser JMS-API ab. Für ActiveMQ könnte es AMQP sein, aber standardmäßig ist es "openwire".
quelle
Ich möchte ein Papier vorschlagen, das mir sehr geholfen hat, den Unterschied zwischen AMQP und JMS besser zu verstehen.
Hier ist der Link zum Artikel: http://www.wmrichards.com/amqp.pdf
quelle
https://spring.io/understanding/AMQP
quelle
Ich vermute, Sie suchen nach dieser Dokumentation , in der zum Teil steht:
quelle