JMS ofrece un conjunto de API para la mensajería: poner un mensaje en una cola, alguien más, en algún momento más tarde, tal vez geográficamente lejos, saca el mensaje de la cola y lo procesa. Nos hemos desacoplado en el tiempo y la ubicación del proveedor de mensajes y el consumidor. Incluso si el consumidor de mensajes está inactivo por un tiempo, podemos seguir produciendo mensajes.
JMS también ofrece una función de publicación/suscripción donde el productor coloca el mensaje en un "tema" y cualquier parte interesada puede suscribirse a ese tema, recibir mensajes a medida que se producen, pero por el momento centrarse solo en el cola capacidad.
Hemos desacoplado algunos aspectos de la relación entre el proveedor y el consumidor. Sin embargo, queda algo de acoplamiento. Primero, como están las cosas, cada mensaje se procesa de la misma manera. Supongamos que queremos introducir diferentes tipos de procesamiento para diferentes tipos de mensajes:
if (message.customer.type == Platinum)
do something special
Obviamente podemos escribir código de esa manera, pero una alternativa sería tener un sistema de mensajería que permite enviar diferentes mensajes a diferentes lugares que nos propusimos hasta tres colas:
Request Queue, the producer(s) puts their requests here
Platinum Queue, platinum consumer processing reads from here
Standard Queue, a standard consumer reads messages from here
Y entonces todo lo que necesitamos es un poco de inteligencia en el propio sistema de colas para transferir a continuación messsage de la cola de solicitudes a la cola de platino o de la cola estándar.
Así que esta es una capacidad de Enrutamiento Basada en Contenido, y es algo que proporciona un ESB. Tenga en cuenta que el ESB utiliza las capacidades fundamentales de cola ofrecidas por JMS.
Un segundo tipo de acoplamiento es que el consumidor y el productor deben estar de acuerdo con el formato del mensaje. En casos simples, eso está bien. Pero cuando comienzas a tener muchos productores que ponen mensajes en la misma cola, comienzas a tener problemas con las versiones. Se presentan nuevos formatos de mensaje pero no desea cambiar todos los proveedores existentes.
Request Version 1 Queue Existing providers write here
Request Version 2 Queue New provider write here, New Consumer Reads here
Y la ESB recoge los mensajes de la cola de la versión 1 y los transforma en la versión 2 mensajes y los pone en la cola de la versión 2.
La transformación de mensajes es otra posibilidad posible de ESB.
Eche un vistazo a los productos de ESB, vea lo que pueden hacer. Como trabajo para IBM, estoy familiarizado con WebSphere ESB
El cínico entre nosotros diría que JMS es una API de Java específica, donde "ESB" es un término de comercialización que cubre una multitud de tecnologías relacionadas y métodos de diseño, y significa muy poco. – skaffman
@skaffman incluso algunos optimistas de ojos brillantes podrían estar de acuerdo contigo ;-) – djna