web-dev-qa-db-fra.com

JMS et AMQP - RabbitMQ

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 questions aussi)

  • RabbitMQ utilise le protocole AMQP (implémente plutôt le protocole AMQP)
  • Les clients Java doivent utiliser les bibliothèques de clients du protocole AMQP pour se connecter/utiliser RabbitMQ
  • Où les API JMS entrent-elles en jeu ici? L'API JMS doit utiliser les bibliothèques clientes AMQP pour se connecter à RabbitMQ?
  • Nous utilisons généralement JMS pour connecter les courtiers de messages tels que RabbitMQ, ActiveMQ, etc. Quel est le protocole par défaut utilisé ici au lieu de AMQP?

Certaines de ces réponses peuvent être stupides. :-) Mais j'essaie de me faire comprendre.

116
Kevin Rave

Votre question est un peu compliquée et ressemble à une question difficile dans un questionnaire. :) (Les enseignants essaient toujours de poser des questions simples qui compliquent les choses: D 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 Middleware Middleware (MOM)) pour l'envoi de messages entre deux ou plusieurs clients . JMS fait partie de la Java Platform, Enterprise Edition) et est défini par une spécification développée sous la Java Processus de communauté en tant que JSR 914. C’est un standard de messagerie qui permet aux composants d’application basés sur Java Enterprise Edition (Java EE) de créer, d’envoyer , recevoir et lire des messages, ce qui permet à la communication entre différents composants d’une application distribuée d’être couplée de manière lâche, fiable et asynchrone .

maintenant (de Wikipedia ):

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

Et la chose la plus importante (encore de Wikipedia):

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 pouvant créer et interpréter des messages conformes à ce format de données peut interagir avec tout autre outil conforme, quel que soit le langage de mise en oeuvre.

Quelques choses importantes à savoir:

  1. N'oubliez pas qu'AMQP est une technologie de messagerie qui n'implémente pas l'API JMS.
  2. JMS est une API et AMQP est un protocole. Par conséquent, il n’est pas logique de dire qu’il s’agit du protocole par défaut de JMS. Bien entendu, 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) pourrait 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, Notification WS, XMPP. Je vous suggère de lire tilisation du transport JMS en tant que protocole de connexion .

Bonne chance :)

99
Freak

Commençons par la base.

RabbitMQ est une MOM (intergiciel orienté message), développée avec Erlang (langage de programmation orienté TLC) et implémentation du protocole filaire AMQP (protocole de message en attente). Actuellement, de nombreuses API clientes (par exemple, Java, C++, RESTful, etc.) sont disponibles pour permettre l'utilisation des services de messagerie RabbitMQ.

JMS (Java Messaging Service) est un standard JCP définissant un ensemble d'API structurées à implémenter par un MOM. ActiveMQ est un exemple de MOM implémentant (c'est-à-dire compatible avec) les API JMS. 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 ce qui précède, prenons le squelette des API JMS, une instance de RabbitMQ et ses Java API clientes, il est possible de développer une implémentation JMS utilisant RabbitMQ: la seule chose qu'il faut do, à ce stade, implémente le modèle d’échange (sur RabbitMQ) conformément à la spécification JMS.

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

38
Paolo Maresca

JMS, lors de sa définition, 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 simplement se conformer à l’API JMS. C'est tout. Habituellement, les clients JMS utilisent un protocole personnalisé que leur serveur de messagerie comprend.

AMQP, d’autre part, 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

14
chitakasa
  • Où les API JMS entrent-elles en jeu ici? L'API JMS doit utiliser les bibliothèques clientes AMQP pour se connecter à RabbitMQ?

JMS étant une API, 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 devrait pouvoir communiquer avec un autre client AMQP.

  • Nous utilisons généralement JMS pour connecter les courtiers de messages tels que RabbitMQ, ActiveMQ, etc. Quel est le protocole par défaut utilisé ici au lieu de AMQP?

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

2
Axel Podehl

https://spring.io/understanding/AMQP

Le protocole AMQP (Advanced Message Queuing Protocol) est une spécification de câble à publication ouverte 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 CPU, ce qui en fait un standard de messagerie multiplate-forme 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 réside dans le fait que les API sont spécifiées, mais pas le format du message. AMQP, JMS n’a aucune exigence quant à la manière dont les messages sont formés et transmis, mais chaque courtier JMS peut implémenter les messages dans un format différent, il leur suffit d’utiliser la même API.

0
gstackoverflow