El Jakarta Mensajería API (anteriormente Java Message Service o JMS API) es una de Java interfaz de programación de aplicaciones (API) para el middleware orientado a mensajes . Proporciona modelos de mensajería genéricos, capaces de manejar el problema productor-consumidor , que se pueden utilizar para facilitar el envío y la recepción de mensajes entre sistemas de software . [1] Jakarta Messaging es parte de Jakarta EE y fue originalmente definida por una especificación desarrollada en Sun Microsystems antes de ser guiada por el Proceso de la Comunidad Java . [2]
Idea general de la mensajería
La mensajería es una forma de comunicación distribuida débilmente acoplada , donde en este contexto el término "comunicación" puede entenderse como un intercambio de mensajes entre componentes de software. Las tecnologías orientadas a mensajes intentan relajar la comunicación estrechamente acoplada (como los sockets de red TCP , CORBA o RMI ) mediante la introducción de un componente intermediario. Este enfoque permite que los componentes de software se comuniquen entre sí de forma indirecta. Los beneficios de esto incluyen a los remitentes de mensajes que no necesitan tener un conocimiento preciso de sus receptores.
Las ventajas de la mensajería incluyen la capacidad de integrar plataformas heterogéneas, reducir los cuellos de botella del sistema, aumentar la escalabilidad y responder más rápidamente a los cambios. [3]
Historial de versiones
- JMS 1.0 [4]
- JMS 1.0.1 (5 de octubre de 1998) [4]
- JMS 1.0.1a (30 de octubre de 1998) [5] [6]
- JMS 1.0.2 (17 de diciembre de 1999) [7]
- JMS 1.0.2a (23 de diciembre de 1999) [8]
- JMS 1.0.2b (27 de agosto de 2001) [9]
- JMS 1.1 (12 de abril de 2002) [10]
- JMS 2.0 (21 de mayo de 2013) [11] [12]
- JMS 2.0a (16 de marzo de 2015) [13] [14]
JMS 2.0 se mantiene actualmente bajo el Proceso de la Comunidad Java como JSR 343. [15]
JMS 3.0 está en desarrollo temprano como parte de Jakarta EE. [dieciséis]
Elementos
Los siguientes son elementos JMS: [17]
- Proveedor JMS
- Una implementación de la interfaz JMS para middleware orientado a mensajes (MOM). Los proveedores se implementan como una implementación de Java JMS o como un adaptador para un MOM que no es Java.
- Cliente JMS
- Una aplicación o proceso que produce y / o recibe mensajes.
- Productor / editor de JMS
- Un cliente JMS que crea y envía mensajes.
- Consumidor / suscriptor de JMS
- Un cliente JMS que recibe mensajes.
- Mensaje JMS
- Objeto que contiene los datos que se transfieren entre clientes JMS.
- Cola JMS
- Un área de preparación que contiene mensajes que se han enviado y están esperando ser leídos (por un solo consumidor). Como sugiere la cola de nombres, los mensajes se entregan en el orden en que se enviaron. Una cola JMS garantiza que cada mensaje se procese solo una vez.
- Tema de JMS
- Un mecanismo de distribución para publicar mensajes que se entregan a varios suscriptores.
Modelos
La API de JMS admite dos modelos distintos:
- Punto a punto
- Publicar y suscribirte
Modelo punto a punto
Bajo el sistema de mensajería punto a punto , los mensajes se enrutan a consumidores individuales que mantienen colas de mensajes entrantes. Este tipo de mensajería se basa en el concepto de colas de mensajes , remitentes y receptores. Cada mensaje se dirige a una cola específica y los clientes receptores extraen los mensajes de las colas establecidas para contener sus mensajes. Si bien cualquier número de productores puede enviar mensajes a la cola, se garantiza que cada mensaje será entregado y consumido por un consumidor. Las colas retienen todos los mensajes que se les envían hasta que se consumen o hasta que caducan. Si no hay consumidores registrados para consumir los mensajes, la cola los retiene hasta que un consumidor se registra para consumirlos.
Modelo de publicación y suscripción
El modelo de publicación y suscripción admite la publicación de mensajes en un "tema" de mensaje en particular. Los suscriptores pueden mostrar interés en recibir mensajes publicados sobre un tema de mensaje en particular. En este modelo, ni el editor ni el suscriptor se conocen entre sí. Una buena analogía para esto es un tablero de anuncios anónimo.
- Cero o más consumidores recibirán el mensaje.
- Existe una dependencia temporal entre editores y suscriptores. El editor debe crear un tema de mensaje para que los clientes se suscriban. El suscriptor debe permanecer activo continuamente para recibir mensajes, a menos que haya establecido una suscripción duradera. En ese caso, los mensajes publicados mientras el suscriptor no está conectado se redistribuirán cada vez que se vuelva a conectar.
JMS proporciona una forma de separar la aplicación de la capa de transporte de proporcionar datos. Las mismas clases de Java se pueden utilizar para comunicarse con diferentes proveedores de JMS utilizando la información de Java Naming and Directory Interface (JNDI) para el proveedor deseado. Las clases primero usan una fábrica de conexiones para conectarse a la cola o tema, y luego usan rellenar y enviar o publicar los mensajes. En el lado receptor, los clientes reciben o se suscriben a los mensajes.
Esquema de URI
RFC 6167 define un jms:
esquema de URI para Java Message Service.
Implementaciones de proveedores
Para utilizar JMS, se debe tener un proveedor de JMS que pueda gestionar las sesiones, las colas y los temas. A partir de la versión 1.4 de Java EE, todos los servidores de aplicaciones Java EE deben contener un proveedor de JMS . Esto se puede implementar utilizando la gestión de flujo de entrada de mensajes de la arquitectura del conector Java EE , que se puso a disposición por primera vez en esa versión.
La siguiente es una lista de proveedores JMS comunes:
- Amazon SQS 's Java Messaging Library
- Apache ActiveMQ
- Apache Qpid , usando AMQP [18]
- IBM MQ (anteriormente MQSeries, luego WebSphere MQ)
- Bus de integración de servicios (SIBus) de IBM WebSphere Application Server [19]
- JBoss Messaging y HornetQ de JBoss
- JORAM del Consorcio OW2
- Abrir cola de mensajes de Oracle
- OpenJMS del grupo OpenJMS
- Oracle WebLogic Server y Oracle AQ
- RabbitMQ de Pivotal Software
Ver también
- Beans controlados por mensajes
- Cola de mensajes : el concepto subyacente de JMS
- Arquitectura orientada a Servicios
- SOA impulsada por eventos
- Las tecnologías de mensajería que no implementan la API JMS incluyen:
- Protocolo de cola de mensajes avanzado (AMQP): protocolo de cola de mensajes estandarizado con múltiples implementaciones independientes
- Servicio de distribución de datos (DDS): un sistema de mensajería en tiempo real estandarizado de Object Management Group (OMG) con más de diez implementaciones que han demostrado la interoperabilidad entre editores y suscriptores.
- Microsoft Message Queue Server : tecnología similar, implementada para .NET Framework
Referencias
- ^ Curry, Edward. 2004. "Middleware orientado a mensajes" . En Middleware para comunicaciones, ed. Qusay H Mahmoud, 1-28. Chichester, Inglaterra: John Wiley and Sons. doi : 10.1002 / 0470862084.ch1 . ISBN 978-0-470-86206-3
- ^ "JSR 914: API de Java Message Service (JMS)" . El programa Java Community Process . Consultado el 31 de julio de 2018 .
- ^ Richards et al., Páginas 3-5.
- ^ a b "Servicio de mensajes Java" (PDF) . Sun Microsystems . 5 de octubre de 1998. Archivado (PDF) desde el original el 24 de febrero de 1999 . Consultado el 31 de julio de 2018 .
- ^ "Documentación de Java Message Service" . Sun Microsystems. 30 de octubre de 1998. Archivado desde el original el 24 de febrero de 1999 . Consultado el 31 de julio de 2018 .
- ^ "Fuente del servicio de mensajes Java - Versión 1.0.1a" . Sun Microsystems. 29 de octubre de 1998. Archivado desde el original (ZIP) el 16 de agosto de 2000 . Consultado el 31 de julio de 2018 .
- ^ "Servicio de mensajes Java" (PDF) . Sun Microsystems (publicado el 17 de diciembre de 1999). 9 de noviembre de 1999. Archivado (PDF) desde el original el 23 de agosto de 2000 . Consultado el 31 de julio de 2018 .
- ^ "Documentación de Java Message Service" . Sun Microsystems. 23 de diciembre de 1999. Archivado desde el original el 29 de febrero de 2000 . Consultado el 31 de julio de 2018 .
- ^ "Servicio de mensajes Java" (PDF) . Sun Microsystems. 27 de agosto de 2001 . Consultado el 31 de julio de 2018 .
- ^ "Servicio de mensajes Java" (PDF) . Sun Microsystems. 12 de abril de 2002 . Consultado el 31 de julio de 2018 .
- ^ "Servicio de mensajes Java" (PDF) . Oracle . 20 de marzo de 2013 . Consultado el 31 de julio de 2018 .
- ^ "Versión final de JMS 2.0" . Especificación del servicio de mensajes Java . 9 de junio de 2017 . Consultado el 31 de julio de 2018 .
- ^ "Servicio de mensajes Java" (PDF) . Oráculo. 10 de marzo de 2015 . Consultado el 31 de julio de 2018 .
- ^ "Publicación de erratas de JMS 2.0 (Rev a)" . Especificación del servicio de mensajes Java . 5 de julio de 2017 . Consultado el 31 de julio de 2018 .
- ^ "JSR 343: Java Message Service 2.0" . El programa Java Community Process . Consultado el 31 de julio de 2018 .
- ^ Monson-Haefel, Richard (6 de diciembre de 2018). "JMS 3.0: ¡Participe!" . Tomitribe . Consultado el 17 de julio de 2020 .
- ^ Servicio de mensajes Java (JMS)
- ^ "Apache Qpid ™: mensajería AMQP de código abierto" .
- ^ Wallis, Graham. "Elección de un sistema de mensajería: WebSphere MQ vs WebSphere Application Server Service Integration Bus" . IBM developerWorks .
Otras lecturas
- Richards, Mark; Richard Monson-Haefel; David A. Chappell (2009). Servicio de mensajes Java, segunda edición . O'Reilly. ISBN 978-0-596-52204-9.
enlaces externos
- Página web oficial
- JSR 343: Servicio de mensajes Java 2.0
javax.jms
Documentación de API Javadoc- Tutorial de Java EE 7 JMS de Oracle
- Una matriz de comparación histórica de proveedores de JMS