Java Message Service (JMS)

QueueEn este Post se habla hacer de la especificación de JMS, los patronos de entrega de manejes que soporta como lo son Punto a Punto(P2P) y Publicador/Suscriptor. También hablare sobre los Temas y Colas (Topis and Queues) y los diferentes tipos de suscriptores que soporta la implementación de JMS.

Java Message Service es una especificación de la Java Community Process(JRS 914) la cual fue desarrollada originalmente para permitir a las aplicaciones Java comunicarse con los proveedores MOM o Middleware Orientado a Mensajes la cual buscaba los siguientes objetivos:

  • Brindas un mecanismo de enrutamiento y entrega de mensajes.
  • Entrega fiable de mensajes
  • Soportar los patronos de entrega de mensajes Punto a Punto(P2P) y Publicador/Subscriptor (P/S)
  • Brindar un mecanismo asíncrono de entrega de mensajes.

En el mercado podemos encontrar diferentes proveedores de JMS los cuales se encuentran embebidos en los principales Application Server como el caso de WebSphere, Wildfly, WebLogic, Glassfish, entre otros, sin embargo todos trabajan bajo el mismo estándar lo que permite que la comunicación entre ellos sea totalmente compatible.

La siguiente imagen muestra como JMS permite que las aplicaciones se pueden comunicar por medio de JMS.ArchJMS

Fig.1: Muestra el proceso por el cual las aplicaciones se comunican a través de JMS.

Aunque JMS es un potente proveedor de Mensajería requiere de la configuración de Colas o Temas para poder depositar lo mensajes de entrada.

Tanto las colas como los temas son muy utilizados en los ambientes distribuidos donde se requerimos una comunicación asíncrona o One Wey(Solo ida) entre los distintos componentes que conforman nuestra infraestructura sin embargo estos se diferencias de los servicios web debido a que los mensajes son colocados en Cola o Temas para luego ser distribuidos a los destinatarios por lo que cambia un poco la forma en que los mensajes son administrados.

Estructura de un mensaje JMS

Al igual que todo protocolo de comunicación los mensajes JMS tiene una Taxonomía la cual se debe de respetar para que los mensajes sea enviados y respondidos de forma correcta.Los mensajes JMS tiene la siguiente estructura:

Header

El Header o cabecera es la parte que contiene todas las propiedades que son necesarias para JMS pueda operar y procesar lo mensajes de forma correcta, Es en esta sección donde es establece el identificador de la conversación(CorrelationID ),Fecha de expiración(Expiration),Tipo de mensaje(Type), Destino al cual deberán responder el mensaje(ReplyTo) y muchas mas las cuales puedes encontrar en la pagina de Oracle.

Body

Esta sección tiene el PayLoad o carga útil la cual representa el mensaje que queremos enviar, Este mensajes puede ser una Map, Texto plano, XML, un Objeto Java, O un Stream o incluso un mensaje personalizado. Lo importante es que esta sección contiene lo que realmente queremos comunicar al destinatario.

 

Una vez explicado a grandes rasgos podemos pasar a explicar que son las Colas(Queue) y Temas(Topics).

Colas (Queue)

Las colas son las mas utilizadas ya que los mensajes van dirigidos a un único receptor por lo cual, cuando un cliente se conecta a JMS y solicita el mensaje este es entregado pero es eliminado de la Cola por lo que si otra cliente busca el mensaje ya no lo encontrara. Este patrón es conocido como Punto a Punto(P2P)

Te invito a ver mi artículo Estructura de datos Queue para aprender más acerca de las colas.

Estructura de datos – Queue (Cola)

En este tipo mensajes hay que tener un cierto cuidad a la hora de solicitar los mensajes ya que si recuperamos un mensaje equivocado el destinatario real ya no lo podrá recibir y pero a un , El remitente jamas recibirá su respuesta.(JMS Permite tener varios clientes solicitando mensajes a la misma Cola)

Queue

Fig.2: Como podemos apreciar en la imagen al único que se le entrega el mensaje  es aquel al que fue dirigido y las demas aplicaciones no son notificadas.

Cuando utilizar Colas:

Las colas son utilices cuando queremos enviar un mensaje a un destinataria único para ser procesado, un ejemplo seria mandar una solicitud de crédito al sistema de crédito(por ponerle un nombre). o simplemente para desacoplar dos sistemas los cuales no queremos que se conozcan sin embargo lo único que conocen los dos es el formato en que se tendrá que hacer la comunicación ( Aquí explico esto )

Temas(Topics)

Por otra parte tenemos lo temas los cuales trabajan de una forma distinta que las Colas pues estos a diferencia de que el mensaje solo es entregado a un único receptor lo Temas pueden enviar el mensaje a Todos los clientes que estén suscritos al Tema de esta manera los Temas(Topics) Siguen el patrón de Publicador/Subscriptor.

Topic

Fig.3: Como podemos apreciar todos los suscriptores que estén suscritos al Tema(Topic) recibirán una copia del mensaje.

Cuando utilizar Temas(Topic)

Los Temas son buenos cuando queremos notificar o compartir información a múltiples destinatarios. Por ejemplo, Si tu estas suscrito a mi blog, Cada vez que yo publique un nuevo Post seras notificado por correo electrónico junto con todos los demas que estén suscritos, esto no es precisamente JMS pero es un ejemplo de donde mas de un destinatario reciben la misma notificación.

¿Crees que JMS juega un papel importante en Java o crees que es una herramienta fácilmente sustituida por otras cosas?

 

*Recuerda que si te gusto este artículo, compártelo y suscribete al blog para recibir todas las actualizaciones por medio de tu correo electrónico.

Artículos relacionados

Java – Weakreference Este tema hasta para los expertos en java les puede resultar desconocido y es que siempre creemos que un objeto que no esta referenciado por ninguna v...
Java – Como eliminar rápidamente elementos r... Hace tiempo un amigo me preguntaba  como podía eliminar los elementos repetidos de una colección sin hacer mucho esfuerzo. Bien la solución que consid...
Como crear un Connection Pool en WebLogic En la entrada pasada les enseñe los pasos para crear un DataSource (Como crear un Data Source en WebLogic) los cuales serán necesarios para la configu...

Oscar Blancarte

Ideológico, Innovador y emprendedor, Padre, Tecnólogo y Autor, amante de la ciencia y la tecnología en todos sus colores y sabores. Arquitecto de software & Full Stack Developer con experiencia en la industria del desarrollo de software y la consultoría. Amante de la programación y el Ajedrez.

Un comentario en “Java Message Service (JMS)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *