JMS y AMQP-RabbitMQ


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 utiliza el protocolo AMQP (en lugar implementa el protocolo AMQP)
  • Los clientes Java necesitan usar bibliotecas de cliente del protocolo AMQP para conectarse / usar RabbitMQ
  • ¿Dónde entra en juego la API de JMS aquí? ¿La API de JMS debería usar bibliotecas cliente AMQP para conectarse a RabbitMQ?
  • Normalmente utilizamos 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 envolver mi cabeza alrededor de ella.

Author: Freak, 2013-03-01

6 answers

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

Como usted sabe:

La API Java Message Service (JMS) es una API Java Message Oriented Middleware (MOM) para enviar mensajes entre dos o más clientes. JMS es una parte de la Plataforma Java, Enterprise Edition, y está definida por una especificación desarrollado bajo el proceso de la Comunidad Java como JSR 914. Es un estándar de mensajería que permite a los componentes de la aplicación basados en Java Enterprise Edition (Java EE) crear, enviar, recibir y leer mensajes. Permite que la comunicación entre los diferentes componentes de una aplicación distribuida sea vagamente acoplada, confiable y asincrónica .

Ahora (de Wikipedia):

El Protocolo Avanzado de Message Queue Server (AMQP) es un protocolo de capa de aplicación estándar abierto para middleware orientado a mensajes. El las características que definen AMQP son orientación de mensajes, colas, enrutamiento (incluyendo punto a punto y publicar y suscribirse), fiabilidad y seguridad.

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

A diferencia de JMS, que simplemente define una API, AMQP es un nivel de cable protocolo. Un protocolo a nivel de cable es una descripción del formato del datos que se envían a través de la red como una corriente de octetos. En consecuencia, cualquier herramienta que pueda crear e interpretar mensajes que conforme a este formato de datos puede interoperar con cualquier otro compatible herramienta 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 de JMS.
  2. JMS es API y AMQP es un protocol.So no tiene sentido decir que lo que es el protocolo predeterminado de JMS, por supuesto cliente las aplicaciones utilizan HTTP / S como protocolo de conexión al invocar un Servicio Web de WebLogic.
  3. JMS es solo una especificación API. No usa ningún protocolo. Un proveedor de JMS (como ActiveMQ) podría estar usando cualquier protocolo subyacente para realice 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, Notificación WS, XMPP. Le sugiero que lea Usando Transporte JMS como Conexión Protocolo.

Buena suerte:)

 90
Author: Freak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-05 08:22:58

Comencemos desde la base.

RabbitMQ es un MOM (Middleware Orientado a mensajes), desarrollado con Erlang (un lenguaje de programación orientado a TLC) y implementando el protocolo AMQP (Advance Message Queue Server Protocol). Actualmente, muchas API de cliente (por ejemplo, Java, C++, RESTful, etc.) están disponibles para habilitar el uso de los servicios de mensajería RabbitMQ.

JMS (Java Messaging Service) es un estándar JCP que define un conjunto de APIs 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. Estos middlewares obtienen las API de JMS e implementan los patrones de exchange en consecuencia.

De acuerdo con lo anterior, tomando 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 haciendo uso de RabbitMQ: lo único que uno tiene que hacer, en ese momento, es implementar la patrón de intercambio (sobre RabbitMQ) según 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).

 32
Author: Paolo Maresca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-16 19:10:25

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. Normalmente, los clientes JMS utilizan un protocolo personalizado que su servidor de mensajería entiende.

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 así disponibles.

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

 14
Author: chitakasa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-01 05:48:19
  • ¿Dónde entra en juego la API de JMS aquí? ¿La API de JMS debería usar bibliotecas cliente AMQP para conectarse a RabbitMQ?

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

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

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

 2
Author: Axel Podehl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-07 10:06:38

Https://spring.io/understanding/AMQP

AMQP (Advanced Message Queueing Protocol) es un cable publicado abiertamente especificación para mensajería asíncrona. Cada byte de transmisión se especifican los datos. Esta característica permite escribir bibliotecas en muchos idiomas, y para ejecutar en múltiples sistemas operativos y CPU arquitecturas, lo que hace que sea realmente interoperable, multiplataforma estándar de mensajería.

AMQP se compara a menudo con JMS (Java Servicio de mensajes), el más común sistema de mensajería en la comunidad Java. Una limitación de JMS es que se especifican las API, pero no el formato del mensaje. 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.

 0
Author: gstackoverflow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-09 15:28:48

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

Cliente JMS para vFabric RabbitMQ es una biblioteca cliente para vFabric RabbitMQ. vFabric RabbitMQ no es un proveedor de JMS, pero tiene características necesario para soportar la cola de JMS y los modelos de mensajería de temas. Cliente JMS para RabbitMQ implementa la especificación JMS 1.1 en la parte superior de la RabbitMQ Java client API, permitiendo así JMS nuevos y existentes aplicaciones para conectarse con brokers RabbitMQ a través de Mensaje Avanzado Protocolo de cola (AMQP).

 -1
Author: Danger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-16 14:25:21