JMS y AMQP - RabbitMQ

133

Estoy tratando de entender qué JMS y cómo está conectado a la terminología AMQP. Sé que JMS es una API y AMQP es un protocolo.

Aquí están mis suposiciones (y preguntas también)

  • RabbitMQ usa el protocolo AMQP (más bien implementa el protocolo AMQP)
  • Los clientes Java necesitan usar bibliotecas de cliente de protocolo AMQP para conectarse / usar RabbitMQ
  • ¿Dónde entra en juego la API JMS aquí? ¿La API JMS debe usar las bibliotecas de cliente AMQP para conectarse a RabbitMQ?
  • Usualmente usamos JMS para conectar corredores de mensajes como RabbitMQ, ActiveMQ, etc. Entonces, ¿cuál es el protocolo predeterminado utilizado aquí en lugar de AMQP?

Algunos de los anteriores pueden ser tontos. :-) Pero tratando de entenderlo.

Kevin Rave
fuente
3
@KevinRave: La respuesta seleccionada es incorrecta en algunos puntos principales que hace. He agregado un comentario para que pueda verlo.
2020
@KevinRave He editado la respuesta. Ahora, la parte controvertida ha reemplazado. Ahora toda la respuesta está perfectamente bien
Freak
No sé quién editó mi respuesta y dio este punto incorrecto que estaba en el número 3 ... porque ya he preguntado lo que Kevin está diciendo en el punto 2. Siempre lea cuidadosamente antes de votar o hacer sugerencias
Freak
1
Echa un vistazo a la sección JMS de este artículo. Tiene una explicación muy detallada saipraveenblog.wordpress.com/2014/12/08/…
java_geek

Respuestas:

118

Su pregunta es un poco desordenada y se asemeja a una pregunta difícil en un documento de preguntas :) (Como los maestros siempre tratan de hacer preguntas simples que hacen complejas: DI espero que no sea un maestro :)) Veamos todas estas preguntas una por una.

Como sabes:

La API de Java Message Service (JMS) es una API de middleware orientado a mensajes de Java (MOM) para enviar mensajes entre dos o más clientes . JMS es parte de Java Platform, Enterprise Edition, y se define mediante una especificación desarrollada bajo el Proceso de la Comunidad Java como JSR 914. Es un estándar de mensajería que permite crear componentes de aplicaciones basados ​​en Java Enterprise Edition (Java EE), enviar, recibir y leer mensajes. Permite que la comunicación entre diferentes componentes de una aplicación distribuida se acople libremente, sea confiable y asíncrona .

Ahora (de Wikipedia ):

El Advanced Message Queuing Protocol (AMQP) es un protocolo de capa de aplicación estándar abierto para middleware orientado a mensajes. Las características definitorias de AMQP son la orientación del mensaje, las colas, el enrutamiento (incluido el punto a punto y la publicación y suscripción), la fiabilidad y la seguridad.

Y lo más importante (nuevamente de Wikipedia):

A diferencia de JMS, que simplemente define una API, AMQP es un protocolo de nivel de cable. Un protocolo a nivel de cable es una descripción del formato de los datos que se envían a través de la red como una secuencia de octetos. En consecuencia, cualquier herramienta que pueda crear e interpretar mensajes que cumplan con este formato de datos puede interoperar con cualquier otra herramienta compatible, independientemente del lenguaje de implementación

Algunas cosas importantes que debes saber:

  1. Tenga en cuenta que AMQP es una tecnología de mensajería que no implementa la API JMS.
  2. JMS es API y AMQP es un protocolo. Por lo tanto, no tiene sentido decir que cuál es el protocolo predeterminado de JMS, por supuesto, las aplicaciones cliente usan HTTP / S como protocolo de conexión al invocar un servicio web WebLogic.
  3. JMS es solo una especificación de API. No usa ningún protocolo. Un proveedor de JMS (como ActiveMQ) podría estar utilizando cualquier protocolo subyacente para realizar la API de JMS. Por ejemplo: Apache ActiveMQ puede usar cualquiera de los siguientes protocolos: AMQP, MQTT, OpenWire, REST (HTTP), RSS y Atom, Stomp, WSIF, WS Notification, XMPP. Le sugiero que lea Uso del transporte JMS como protocolo de conexión .

Buena suerte :)

Monstruo
fuente
20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP: No. Eso no es correcto. JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.: No. Eso no es correcto. JMS es solo una especificación de API. No utiliza ningún protocolo. Un proveedor de JMS (como ActiveMQ) podría estar utilizando cualquier protocolo subyacente para realizar la API de JMS. Por ejemplo: Apache ActiveMQ puede usar cualquiera de los siguientes protocolos: AMQP, MQTT, OpenWire, REST (HTTP), RSS y Atom, Stomp, WSIF, WS Notification, XMPP.
2020
He editado la respuesta. Ahora la parte controvertida ha reemplazado.
Freak
1
@brainOverflow No sé quién editó mi respuesta y dio este punto incorrecto que estaba en el número 3 ... porque he preguntado lo que está diciendo en el punto 2. Siempre lea detenidamente antes de votar hacia abajo o hacer sugerencias
Freak
Ya agregué cosas de ese PDF para que pueda ir a otros enlaces también
Freak
43

Comencemos desde la base.

RabbitMQ es un MOM (Middleware orientado a mensajes), desarrollado con Erlang (un lenguaje de programación orientado a TLC) e implementando el protocolo de cable AMQP (Protocolo avanzado de colas de mensajes). Actualmente, muchas API de cliente (por ejemplo, Java, C ++, RESTful, etc.) están disponibles para permitir el uso de los servicios de mensajería RabbitMQ.

JMS (Java Messaging Service) es un estándar JCP que define un conjunto de API estructuradas para ser implementadas por un MOM. Un ejemplo de MOM que implementa (es decir, es compatible con) las API de JMS es ActiveMQ; También hay HornetMQ y otros. Tales middlewares obtienen las API de JMS e implementan los patrones de intercambio en consecuencia.

Según lo anterior, tomado el esqueleto de las API de JMS, una instancia de RabbitMQ y sus API de cliente Java, es posible desarrollar una implementación de JMS utilizando RabbitMQ: lo único que hay que hacer, en ese punto, es implementar la patrón de intercambio (sobre RabbitMQ) de acuerdo con la especificación JMS.

La clave es: un conjunto de API, como JMS, se puede implementar sin importar la tecnología (en este caso, RabbitMQ).

Paolo Maresca
fuente
¿Qué significa TLC?
mvmn
@mvmm TLC significa Telecomunicaciones. Por favor, eche un vistazo a [1]. [1] allacromains.com/TLC/Telecommunication
Paolo Maresca
15

JMS, cuando se definió, no definió un protocolo entre el cliente JMS y un servidor de mensajería. El cliente JMS, que implementa la API JMS, puede usar cualquier protocolo para comunicarse con el servidor de mensajería. El cliente solo necesita cumplir con la API de JMS. Eso es todo. Usualmente, los clientes JMS usan un protocolo personalizado que su servidor de mensajería comprende.

AMQP, por otro lado, es un protocolo entre un cliente de mensajería y un servidor de mensajería. Un cliente JMS puede usar AMQP como protocolo para comunicarse con el servidor de mensajería. Y hay clientes como ese disponibles.

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

chitakasa
fuente
2
  • ¿Dónde entra en juego la API JMS aquí? ¿La API JMS debe usar las bibliotecas de cliente AMQP para conectarse a RabbitMQ?

JMS es una API, por lo que algunas API de JMS se implementan a través del protocolo AMQP (como Apache QPID JMS ), mientras que la mayoría de las API de JMS usan otros protocolos. Si la versión del protocolo AMQP es la misma, dicho cliente debería poder comunicarse con otro cliente AMQP.

  • Usualmente usamos JMS para conectar corredores de mensajes como RabbitMQ, ActiveMQ, etc. Entonces, ¿cuál es el protocolo predeterminado utilizado aquí en lugar de AMQP?

Depende de su configuración de esa API JMS. Para ActiveMQ, podría ser AMQP pero por defecto es 'openwire'

Axel Podehl
fuente
1

Quiero sugerir un artículo, me ayudó mucho a comprender mejor cuál es la diferencia entre AMQP y JMS.

Aquí está el enlace al documento: http://www.wmrichards.com/amqp.pdf

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
fuente
0

https://spring.io/understanding/AMQP

AMQP (Advanced Message Queuing Protocol) es una especificación de cable abiertamente publicada para mensajería asincrónica. Se especifica cada byte de datos transmitidos. Esta característica permite que las bibliotecas se escriban en muchos idiomas y se ejecuten en múltiples sistemas operativos y arquitecturas de CPU, lo que lo convierte en un estándar de mensajería multiplataforma verdaderamente interoperable.

AMQP a menudo se compara con JMS (Java Message Service), el sistema de mensajería más común en la comunidad Java. Una limitación de JMS es que las API están especificadas, pero el formato del mensaje no. A diferencia de AMQP, JMS no tiene ningún requisito sobre cómo se forman y transmiten los mensajes. Esencialmente, cada corredor de JMS puede implementar los mensajes en un formato diferente. Solo tienen que usar la misma API.

gstackoverflow
fuente
-1

Sospecho que puede estar buscando esta documentación que dice, en parte:

El cliente JMS para vFabric RabbitMQ es una biblioteca cliente para vFabric RabbitMQ. vFabric RabbitMQ no es un proveedor de JMS, pero tiene las características necesarias para admitir los modelos de mensajería JMS Queue y Topic. El Cliente JMS para RabbitMQ implementa la especificación JMS 1.1 además de la API del cliente Java RabbitMQ, lo que permite que las aplicaciones JMS nuevas y existentes se conecten con los corredores RabbitMQ a través del Protocolo de cola de mensajes avanzados (AMQP).

Peligro
fuente
No No es el que estaba mirando. Pero similar
Kevin Rave