Por fin después de mucho trabajar pudimos dar con la respuesta de esta incógnita que muchos lectores de esta web presentan. Si deseas compartir algo puedes aportar tu información.
Solución:
Tu pregunta es un poco complicada y parece una pregunta difícil en un cuestionario 🙂 (Como los maestros siempre intentan hacer preguntas simples que se vuelven complejas: espero que no seas un maestro :)) Veamos todo esto uno por uno.
Como sabes:
El servicio de mensajes de Java (JMS) API es una API Java Message Oriented Middleware (MOM) para enviar mensajes entre dos o más clientes. JMS es parte de Java Platform, Enterprise Edition y está definido por una especificación desarrollada bajo el Java Community Process como JSR 914. Es un estándar de mensajería que permite que los componentes de aplicaciones basados en Java Enterprise Edition (Java EE) creen, envíen, reciban y lean mensajes. Permite que la comunicación entre diferentes componentes de una aplicación distribuida sea débilmente acoplada, confiable y asíncrona..
Ahora (de Wikipedia):
El Protocolo Avanzado de Cola de Mensajes (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 de mensajes, la cola, el enrutamiento (incluidos punto a punto y publicación y suscripción), confiabilidad y seguridad.
Y lo más importante (de nuevo de Wikipedia):
A diferencia de JMS, que simplemente define una API, AMQP es un protocolo a 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 un flujo de octetos. En consecuencia, cualquier herramienta que pueda crear e interpretar mensajes que se ajusten a este formato de datos puede interoperar con cualquier otra herramienta compatible, independientemente del idioma de implementación.
Algunas cosas importantes que debes saber:
- Tenga en cuenta que AMQP es una tecnología de mensajería que no implementa la API de JMS.
- JMS es API y AMQP es un protocolo. Por lo tanto, no tiene sentido decir que el protocolo predeterminado de JMS, por supuesto, las aplicaciones cliente usan HTTP/S como protocolo de conexión cuando invocan un servicio web de WebLogic.
- JMS es solo una especificación de API. No utiliza ningún protocolo. Un proveedor de JMS (como ActiveMQ) podría estar usando 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 🙂
Empecemos desde la base.
ConejoMQes una mamá (Middleware orientado a mensajes), desarrollado con Erlang (un lenguaje de programación orientado a TLC) y implementando el protocolo de cable AMQP (Protocolo Avanzado de Cola de Mensajes). Actualmente, muchas API de cliente (p. ej., Java, C++, RESTful, etc.) están disponibles para permitir el uso de los servicios de mensajería de RabbitMQ.
JMS (Java Messaging Service) es un estándar JCP que define un conjunto de API estructuradas para ser implementado por una mamá. Un ejemplo de MOM que implementa (es decir, es compatible con) las API de JMS es ActiveMQ; también está HornetMQ y otros. Dichos middlewares obtienen las API de JMS e implementan los patrones de intercambio en consecuencia.
De acuerdo con lo anterior, tomando el esqueleto de las API de JMS, una instancia de RabbitMQ y sus API de cliente de Java, es posible desarrollar una implementación de JMS haciendo uso de RabbitMQ: lo único que hay que hacer, en ese momento, es implementar el patrón de intercambio (sobre RabbitMQ) según la especificación JMS.
los key es: se puede implementar un conjunto de API, como JMS, sin importar la tecnología (en este caso, RabbitMQ).
JMS, cuando se definió, no definía 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 JMS api. Eso es todo. Por lo general, los clientes JMS utilizan un protocolo personalizado que comprende su servidor de mensajería.
AMQP, por otro lado, es un protocolo entre un cliente de mensajería y un servidor de mensajería. Un cliente JMS puede utilizar 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
Te invitamos a corroborar nuestro estudio poniendo un comentario y valorándolo te damos la bienvenida.