JMS en las integraciones

Cuando hablamos de integrar aplicaciones se nos viene a la menta los WebServices ya que es una forma simple de comunicar dos sistemas independientes sin importar la tecnolog铆a ya que es una soluci贸n muy simple, limpia y ademas son un est谩ndar.

Una soluci贸n de integraci贸n por servicios quedar铆a algo a s铆.

Invocaci贸n directa de un Webservice

 

En la siguiente figura podemos apreciar que la aplicaci贸n A se comunica con la aplicaci贸n B a trav茅s de un WebService. Este dise帽o funciona pero no es lo suficiente robusto como para soportar si la aplicaci贸n B queda fuera de linea por alguna raz贸n.

Imagines el escenario en donde un la aplicaci贸n B queda fuera de linea, lo cual se ver铆a a s铆

WS P2P Fail

 

La invocaci贸n fallar铆a por lo que tendr铆amos dos escenarios

  1. La aplicaci贸n A continua sin importar que B este fuera de linea
  2. La aplicaci贸n A tendr铆a que cancelar la operaci贸n que estuviera realizando debido a que es necesario que B reciba la petici贸n.

 

Para solucionar este tipo de problemas podemos utilizar colas de mensajes(Queue) para encolar los mensajes y ser atendidos cuando la aplicaci贸n B pueda, esto incluye que si queda fuera de linea los mensajes son guardados hasta que B entra en linea nuevamente.

Un escenario con una cola de mensajes quedar铆a a s铆.

JMS Java Onli

 

En el siguiente escenario la aplicaci贸n A en vez de comunicarse directamente con la aplicaci贸n B dejara su mensaje en una cola de mensajes y no le interesara si B esta en linea o 聽no, Incluso no le interesa que aplicaci贸n procese la solicitud logrando un desacoplamiento total. Imaginemos que la aplicaci贸n B queda obsoleta y que metemos una aplicaci贸n C la cual respeta el formato del mensaje de A, esto dar谩 como resultado que a la aplicaci贸n A no le interesara quien procese la petici贸n siempre y cuando sea procesada. Sin embargo esta soluci贸n tiene un gran detalle y es que al comunicarnos con colas de mensaje JMS solo se podr谩 hacer entre aplicaciones Java.

Para solucionar el problema de comunicaci贸n con aplicaciones no Java se puede utilizar una peque帽a variante del dise帽o anterior.

JMS ESB

 

Podemos crear un Proxy el cual se encargue de exponer un servicio que lo 煤nico que haga sea dejar el mensaje en la cola de mensajes. para esto podemos utilizar herramientas dise帽adas para la virtualizaci贸n de servicios como lo son los Enterprice Service Bus. De esta forma si A es una aplicaci贸n .NET y B java ya no importara por que la comunicaci贸n sera a trav茅s de WebServices.

 

Espero que estas soluciones les sean de utilidad.

 

5 thoughts to “JMS en las integraciones”

  1. Buen post sobre este tema de JMS. Justamente la aplicaci贸n de JMS ayuda a cumplir de otra manera con el pattern: ‘Reliable Messaging’, para que de alguna manera ante una falla en la comunicaci贸n entre la app#1 y app#2 (consider谩ndolos como servicios HTTP), se asegurar谩 que el mensaje se recepcionar谩 si o si por la app#2, ya que le mensaje ser谩 guardado el tiempo que sea necesario en la JMS Queue. Lo que si creo que a nivel gr谩fico en la arquitectura debi贸 de considerarse un servicio MDB intermedio que est茅 a la escucha del mensaje entre la Queue y app#2.

    1. Muy interesante tu comentario, releable messaging es otra alternativa y lo podr铆amos usar incluso en una arquitectura mucho robusta. Aunque en lo personal yo tengo una filosof铆a para usar jms normalito o Releable messaging, y es que esta la uso cuando una de dos: son mensaje s煤per cr铆ticos o el destinatario de nuestros mensajes est谩n fuera de nuestro alcance, es decir que son aplicaciones de terceros en donde yo no puedo estar seguro de su disponibilidad y me inclinar铆a por jms cuando los mensajes son transmitidos entre aplicaciones de mi arquitectura en donde yo estoy seguro que las aplicaciones estar谩n disponibles la mayoria del tiempo y si llegaran a fallar yo me enterar铆a.

      Con respecto lo del MDB en realizada yo asumo que en ambos aplicativos existe un MDB o un simple JMS consumer.

      驴que opinas驴

Deja un comentario

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