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.

5 thoughts to “Java Message Service (JMS)”

  1. Hola

    veo que este post es del 2014, consulta 驴esta tecnologia se deberia considerar antigua?
    驴hay tecnologia de intregracion mas nuevas?

    lo pregunto por que tengo que integrar 2 sistemas en java 驴que me recomiendas?

    gracias
    saludos

    1. Hola Ricardo,

      La integraci贸n con aplicaciones por medio de mensajes (Queue o Topics) sigue siendo hasta la fecha una soluci贸n basta buena y robusta, pero m谩s alla de si es antigua o no, es necesario entender que tipo de integraci贸n requieres para tus aplicaciones. la integraci贸n por medio de mensajes como es el caso de JMS, es muy buena para desacoplar las dependencias entre aplicaciones, al mismo tiempo que permite una alta tolerancia a fallos, pues no importa si la aplicaci贸n destino este o no activa al momento de env铆as el mensaje, pues este lo recibir谩 en cuanto est茅 disponible, de la misma forma, es importante entender que este tipo de comunicaci贸n es As铆ncrona.

      Por otra parte, existe otros medios de integraci贸n como lo son los servicios REST o SOAP, del cual tengo un tutorial para implemenetar API de cada uno y la diferencia entre estas dos tecnolog铆as.

  2. hola Oscar, gracias por tu respuesta, otra consulta, que pasa si cuando se esta ejecutando/procesando un mensaje y este presenta un error y se cae, donde se pueden visualizan los errores para poder corregirlo mas adelante

    saludos

    1. Dependiendo el error puede hacer varias cosas, si es un error reprocesable, lo puedes mantente en la Queue para que se procese nuevamente m谩s adelante, si es un error no recuperable, entonces tendr谩s que sacar el mensaje y notificar a los usuario para que realizasen alguna tarea. Como tal, JMS no tiene un visor de errores, en tal caso lo tendr谩s que desarrollar por tu cuenta.

Deja un comentario

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