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)
Certaines de ces réponses peuvent être stupides. :-) Mais j'essaie de me faire comprendre.
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:
Bonne chance :)
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).
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
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.
Cela dépend de votre configuration de cette API JMS. Pour ActiveMQ, cela pourrait être AMQP mais par défaut, il est 'openwire'
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.