JMS et AMQP - RabbitMQ


133

J'essaie de comprendre ce que JMS et comment il est connecté à la terminologie AMQP. Je sais que JMS est une API et AMQP est un protocole.

Voici mes hypothèses (et mes questions également)

  • RabbitMQ utilise le protocole AMQP (implémente plutôt le protocole AMQP)
  • Les clients Java doivent utiliser les bibliothèques clientes du protocole AMQP pour se connecter / utiliser RabbitMQ
  • Où l'API JMS entre en jeu ici? L'API JMS doit utiliser les bibliothèques clientes AMQP pour se connecter à RabbitMQ?
  • Habituellement, nous utilisons JMS pour connecter des courtiers de messages comme RabbitMQ, ActiveMQ, etc. Alors, quel est le protocole par défaut utilisé ici au lieu d'AMQP?

Certains des éléments ci-dessus peuvent être stupides. :-) Mais en essayant d'enrouler ma tête autour de ça.


3
@KevinRave: La réponse choisie est erronée sur certains points principaux qu'elle soulève. J'ai ajouté un commentaire pour que vous puissiez le regarder.
2020

@KevinRave J'ai modifié la réponse.Maintenant, la partie controversée a remplacé.Maintenant, toute la réponse est parfaitement OK
Freak

Je ne sais pas qui a édité ma réponse et a donné ce point inapproprié qui était au numéro 3 .. parce que j'ai déjà demandé la chose que kevin dit au point 2. Toujours lire attentivement avant de voter ou de faire des suggestions
Freak

1
Jetez un œil à la section JMS de cet article. Il a une explication très détaillée saipraveenblog.wordpress.com/2014/12/08/…
java_geek

Réponses:


118

Votre question est un peu compliquée et ressemble à une question difficile dans un papier de questions :) (Comme les enseignants essaient toujours de poser des questions simples et complexes: J'espère que vous n'êtes pas un enseignant :)) Voyons tout cela un par un.

Comme vous le savez:

L'API Java Message Service (JMS) est une API Java Message Oriented Middleware (MOM) pour l'envoi de messages entre deux clients ou plus . JMS fait partie de Java Platform, Enterprise Edition et est défini par une spécification développée dans le cadre du Java Community Process sous le nom de JSR 914. Il s'agit d'une norme de messagerie qui permet aux composants d'application basés sur Java Enterprise Edition (Java EE) de créer, envoyer, recevoir et lire des messages. Il permet à la communication entre différents composants d'une application distribuée d'être faiblement couplée, fiable et asynchrone .

Maintenant (de Wikipedia ):

Le protocole AMQP (Advanced Message Queuing Protocol) est un protocole de couche application standard ouvert pour le middleware orienté message. Les caractéristiques déterminantes d'AMQP sont l'orientation des messages, la mise en file d'attente, le routage (y compris le point à point et la publication et l'abonnement), la fiabilité et la sécurité.

Et le plus important (encore une fois sur Wikipédia):

Contrairement à JMS, qui définit simplement une API, AMQP est un protocole de niveau filaire. Un protocole de niveau filaire est une description du format des données envoyées sur le réseau sous forme de flux d'octets. Par conséquent, tout outil capable de créer et d'interpréter des messages conformes à ce format de données peut interagir avec tout autre outil conforme quel que soit le langage d'implémentation.

Certaines choses importantes que vous devez savoir:

  1. Gardez à l'esprit que AMQP est une technologie de messagerie qui n'implémente pas l'API JMS.
  2. JMS est API et AMQP est un protocole. Il est donc inutile de dire que ce qui est le protocole par défaut de JMS, bien sûr, les applications clientes utilisent HTTP / S comme protocole de connexion lors de l'appel d'un service Web WebLogic.
  3. JMS n'est qu'une spécification d'API. Il n'utilise aucun protocole. Un fournisseur JMS (comme ActiveMQ) peut utiliser n'importe quel protocole sous-jacent pour réaliser l'API JMS. Par exemple: Apache ActiveMQ peut utiliser l'un des protocoles suivants: AMQP, MQTT, OpenWire, REST (HTTP), RSS et Atom, Stomp, WSIF, WS Notification, XMPP. Je vous suggère de lire Utiliser le transport JMS comme protocole de connexion .

Bonne chance :)


20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP: Non, ce n'est pas correct. JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.: Non, ce n'est pas correct. JMS n'est qu'une spécification d'API. Il n'utilise aucun protocole. Un fournisseur JMS (comme ActiveMQ) peut utiliser n'importe quel protocole sous-jacent pour réaliser l'API JMS. Par exemple: Apache ActiveMQ peut utiliser l'un des protocoles suivants: AMQP, MQTT, OpenWire, REST (HTTP), RSS et Atom, Stomp, WSIF, WS Notification, XMPP.
2020

J'ai édité la réponse. Maintenant, la partie controversée a remplacé.
Freak

1
@brainOverflow Je ne sais pas qui a édité ma réponse et a donné ce point inapproprié qui était au numéro 3 .. parce que j'ai demandé la chose que vous dites au point 2. Lisez toujours attentivement avant de voter ou de faire des suggestions
Freak

J'ai déjà ajouté des éléments de ce PDF afin que vous puissiez également accéder à d'autres liens
Freak

43

Commençons par la base.

RabbitMQ est un MOM (Message Oriented Middleware), développé avec Erlang (un langage de programmation orienté TLC) et implémentant le protocole filaire AMQP (Advance Message Queuing Protocol). Actuellement, de nombreuses API client (par exemple, Java, C ++, RESTful, etc.) sont disponibles pour permettre l'utilisation des services de messagerie RabbitMQ.

JMS (Java Messaging Service) est une norme JCP définissant un ensemble d'API structurées à implémenter par un MOM. Un exemple de MOM qui implémente (c'est-à-dire est compatible avec) les API JMS est ActiveMQ; il y a aussi HornetMQ et d'autres. Ces middlewares obtiennent les API JMS et implémentent les modèles d'échange en conséquence.

Selon ci-dessus, en prenant le squelette des API JMS, une instance de RabbitMQ et de ses API client Java, il est possible de développer une implémentation JMS en utilisant RabbitMQ: la seule chose que l'on ait à faire, à ce stade, est d'implémenter le modèle d'échange (sur RabbitMQ) selon la spécification JMS.

La clé est la suivante: un ensemble d'API, comme JMS, peut être implémenté quelle que soit la technologie (dans ce cas, RabbitMQ).


Que signifie TLC?
mvmn

@mvmm TLC signifie Télécommunication. Veuillez jeter un œil à [1]. [1] allacronyms.com/TLC/Telecommunication
Paolo Maresca

15

JMS, lorsqu'il a été défini, ne définissait pas de protocole entre le client JMS et un serveur de messagerie. Le client JMS, qui implémente l'API JMS, peut utiliser n'importe quel protocole pour communiquer avec le serveur de messagerie. Le client doit juste être compatible avec l'API JMS. C'est tout. Les clients JMS utilisent généralement un protocole personnalisé que leur serveur de messagerie comprend.

AMQP, quant à lui, est un protocole entre un client de messagerie et un serveur de messagerie. Un client JMS peut utiliser AMQP comme protocole pour communiquer avec le serveur de messagerie. Et il y a des clients comme ça disponibles.

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


2
  • Où l'API JMS entre en jeu ici? L'API JMS doit utiliser les bibliothèques clientes AMQP pour se connecter à RabbitMQ?

JMS est une API, donc certaines API JMS sont implémentées via le protocole AMQP (comme Apache QPID JMS ) alors que la plupart des API JMS utilisent d'autres protocoles. Si la version du protocole AMQP est la même, un tel client doit être en mesure de communiquer avec un autre client AMQP.

  • Habituellement, nous utilisons JMS pour connecter des courtiers de messages comme RabbitMQ, ActiveMQ, etc. Alors, quel est le protocole par défaut utilisé ici au lieu d'AMQP?

Cela dépend de votre configuration de cette API JMS. Pour ActiveMQ, cela pourrait être AMQP mais par défaut c'est 'openwire'



0

https://spring.io/understanding/AMQP

AMQP (Advanced Message Queuing Protocol) est une spécification de fil publiée ouvertement pour la messagerie asynchrone. Chaque octet de données transmises est spécifié. Cette caractéristique permet aux bibliothèques d'être écrites dans de nombreux langages et de fonctionner sur plusieurs systèmes d'exploitation et architectures de processeur, ce qui en fait une norme de messagerie multiplateforme véritablement interopérable.

AMQP est souvent comparé à JMS (Java Message Service), le système de messagerie le plus courant de la communauté Java. Une limitation de JMS est que les API sont spécifiées, mais le format du message ne l'est pas. Contrairement à AMQP, JMS n'a aucune exigence quant à la façon dont les messages sont formés et transmis. Essentiellement, chaque courtier JMS peut implémenter les messages dans un format différent. Ils doivent simplement utiliser la même API.


-1

Je soupçonne que vous cherchez peut-être cette documentation qui dit, en partie:

Le client JMS pour vFabric RabbitMQ est une bibliothèque cliente pour vFabric RabbitMQ. vFabric RabbitMQ n'est pas un fournisseur JMS mais dispose des fonctionnalités nécessaires pour prendre en charge les modèles de messagerie JMS Queue et Topic. Le client JMS pour RabbitMQ implémente la spécification JMS 1.1 en plus de l'API client Java RabbitMQ, permettant ainsi aux applications JMS nouvelles et existantes de se connecter aux courtiers RabbitMQ via le protocole AMQP (Advanced Message Queuing Protocol).


Nan. Ce n'est pas celui que je regardais. Mais pareil.
Kevin Rave
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.