¿Uso real de JMS / colas de mensajes? [cerrado]

182

Estaba leyendo un poco sobre JMS y Apache ActiveMQ. ¿Y me preguntaba para qué uso del mundo real han utilizado las personas aquí JMS o tecnologías de cola de mensajes similares?

nos
fuente

Respuestas:

191

JMS (ActiveMQ es una implementación de intermediario JMS) se puede utilizar como un mecanismo para permitir el procesamiento de solicitudes asíncronas. Es posible que desee hacer esto porque la solicitud tarda mucho en completarse o porque varias partes pueden estar interesadas en la solicitud real. Otra razón para usarlo es permitir que varios clientes (potencialmente escritos en diferentes idiomas) accedan a la información a través de JMS. ActiveMQ es un buen ejemplo aquí porque puede usar el protocolo STOMP para permitir el acceso desde un cliente C # / Java / Ruby.

Un ejemplo del mundo real es el de una aplicación web que se utiliza para realizar un pedido para un cliente en particular. Como parte de hacer ese pedido (y almacenarlo en una base de datos) es posible que desee llevar a cabo una serie de tareas adicionales:

  • Almacene el pedido en algún tipo de sistema de back-end de terceros (como SAP)
  • Enviar un correo electrónico al cliente para informarle que su pedido ha sido realizado

Para hacer esto, el código de su aplicación publicaría un mensaje en una cola JMS que incluye una identificación de pedido. Una parte de su aplicación que escucha la cola puede responder al evento tomando el ID de pedido, buscando el pedido en la base de datos y luego haciendo ese pedido con otro sistema de terceros. Otra parte de su aplicación puede ser responsable de tomar el ID de pedido y enviar un correo electrónico de confirmación al cliente.

Jon
fuente
Hola @ Jon, ¿has visto esta etiqueta de documentación? stackoverflow.com/documentation/jms/commit solo necesitan un soporte de committer para habilitar el tema, creo que tú podrías ser el :) que les permita darnos documentos increíbles sobre JMS
juanmf
@Jon, según tengo entendido, jms es en sí una implementación del patrón de integración empresarial
valik
No, Mule o Camel serían ...
Jon
1
Si cualquier cantidad de aplicaciones puede estar consumiendo los mensajes en la cola, ¿cómo sabe la cola cuándo eliminar mensajes antiguos?
Basil Bourque
95

Úselos todo el tiempo para procesar operaciones de larga duración de forma asincrónica. Un usuario web no querrá esperar más de 5 segundos para que se procese una solicitud. Si tiene uno que dura más que eso, un diseño es enviar la solicitud a una cola e inmediatamente enviar una URL que el usuario puede verificar para ver cuándo finaliza el trabajo.

Publicar / suscribirse es otra buena técnica para desacoplar remitentes de muchos receptores. Es una arquitectura flexible, porque los suscriptores pueden ir y venir según sea necesario.

duffymo
fuente
41
Después de leer su respuesta, voy a agregar JMS a mi lista 'Lo que voy a aprender este año' :)
Roman
En nuestros días, en lugar de usar la especificación JMS, podemos usar llamadas a métodos asincrónicos. Para obtener más información, consulte: docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
geo
3
No son exactamente lo mismo. No hay entrega garantizada con una llamada de método asíncrono; no hay noción de temas que puedan enviarse a varios oyentes a la vez.
duffymo
75

He tenido muchos usos increíbles para JMS:

  • Comunicación por chat web para servicio al cliente.

  • Registro de depuración en el servidor. Todos los servidores de aplicaciones transmitieron mensajes de depuración en varios niveles. Entonces se podría iniciar un cliente JMS para buscar mensajes de depuración. Claro que podría haber usado algo como syslog , pero esto me dio todo tipo de formas de filtrar la salida en función de la información contextual (ecualizador por nombre del servidor de la aplicación, llamada a la API, nivel de registro, ID de usuario, tipo de mensaje, etc.). También coloreé la salida.

  • Depurar el registro en el archivo. Igual que el anterior, solo se extrajeron piezas específicas mediante filtros y se registraron en el archivo para el registro general.

  • Alertas Una vez más, una configuración similar al registro anterior, observando errores específicos y alertando a las personas por diversos medios (correo electrónico, mensaje de texto, mensajería instantánea, mensaje emergente de Growl ...)

  • Configuración y control dinámicos de clústeres de software. Cada servidor de aplicaciones emitiría un mensaje "configúreme", luego un demonio de configuración que respondería con un mensaje que contiene todo tipo de información de configuración. Más tarde, si todos los servidores de aplicaciones necesitaran cambiar sus configuraciones a la vez, se podría hacer desde el demonio config.

  • Y lo habitual: transacciones en cola para actividades retrasadas, como facturación, procesamiento de pedidos, aprovisionamiento, generación de correo electrónico ...

Es excelente en cualquier lugar donde desee garantizar la entrega de mensajes de forma asincrónica.

mikesomeone
fuente
55
No me parece correcto usar JMS para el registro de depuración. Las colas y los mensajes tienen un costo significativo y el registro (para la depuración que generalmente registra mucho) debe ser lo más rápido posible.
Marco Altieri
19

Distribuido (a) computación síncrona.
Un ejemplo del mundo real podría ser un marco de notificación de toda la aplicación, que envía correos electrónicos a las partes interesadas en varios puntos durante el curso del uso de la aplicación. Por lo tanto, la aplicación actuaría como un Producercreando un Messageobjeto, poniéndolo en un particular Queuey avanzando.
Habría un conjunto de Consumercorreos electrónicos que se suscribirían a la Queuepregunta en cuestión y se encargarían de manejar el Messageenvío. Tenga en cuenta que durante el curso de esta transacción, los Producers se desacoplan de la lógica de cómo Messagese manejaría un determinado .
Los marcos de mensajería (ActiveMQ y similares) actúan como una columna vertebral para facilitar tales Messagetransacciones al proporcionar MessageBrokers.

pugmarx
fuente
Quiero un procesamiento asincrónico porque RestService Api es síncrono. Cómo hacerlo con ActiveMq y Jms. Por favor ayuda en esto. stackoverflow.com/questions/19706788/… . Gracias por su ayuda y tiempo
Kumar
10

Lo he usado para enviar intercambios intradía entre diferentes sistemas de gestión de fondos. Si desea obtener más información acerca de lo que es una excelente tecnología de mensajería, puedo recomendar el libro " Patrones de integración empresarial ". Hay algunos ejemplos de JMS para cosas como solicitar / responder y publicar / suscribirse.

La mensajería es una excelente herramienta para la integración.

RichardOD
fuente
8

Lo usamos para iniciar el procesamiento asincrónico que no queremos interrumpir o entrar en conflicto con una transacción existente.

Por ejemplo, supongamos que tiene una lógica costosa y muy importante como "comprar cosas", una parte importante de comprar cosas sería "notificar a la tienda de cosas". Hacemos que la llamada de notificación sea asíncrona para que cualquier lógica / procesamiento que esté involucrado en la llamada de notificación no bloquee o compita con recursos con la lógica comercial de compra. Resultado final, la compra se completa, el usuario está contento, recibimos nuestro dinero y debido a que la cola está garantizada, la tienda recibe una notificación tan pronto como se abre o cuando hay un nuevo artículo en la cola.

Kevin Williams
fuente
1
Por favor ayuda en esto. stackoverflow.com/questions/19706788/… . Gracias por su ayuda y tiempo.
Kumar
2
Pero debido a que la solicitud es asíncrona, debido a un problema de red, es posible que su mensaje no se envíe. ¿Qué hay de esto? Cuando desee comprar cosas, debe enviar su nitificación. ¿no lo hace?
grep
8

Lo he usado para mi proyecto académico, que era un sitio web minorista en línea similar a Amazon. JMS se utilizó para manejar las siguientes características:

  1. Actualice la posición de los pedidos realizados por los clientes, ya que el envío viaja de un lugar a otro. Esto se realizó mediante el envío continuo de mensajes a la cola JMS.
  2. Alertar sobre eventos inusuales como retrasos en el envío y luego enviar un correo electrónico al cliente.
  3. Si la entrega llega a su destino, se envía un evento de entrega.

Tuvimos múltiples clientes remotos también implementados conectados al servidor principal. Si la conexión está disponible, utilizan para acceder a la base de datos principal o si no utilizan su propia base de datos. Para manejar la consistencia de los datos, implementamos el mecanismo 2PC. Para esto, utilizamos JMS para intercambiar los mensajes entre estos sistemas, es decir, uno que actúa como coordinador que iniciará el proceso enviando un mensaje en la cola y otros responderán en consecuencia enviando nuevamente un mensaje en la cola. Como otros ya han mencionado, esto fue similar al modelo pub / sub.

QWERTY
fuente
6

He visto JMS utilizado en diferentes proyectos comerciales y académicos. JMS puede entrar fácilmente en su imagen, siempre que desee tener un sistema distribuido totalmente desacoplado. En términos generales, cuando necesita enviar su solicitud desde un nodo, y alguien en su red se encarga de ello sin / con darle al remitente información sobre el receptor.

En mi caso, he usado JMS en el desarrollo de un middleware orientado a mensajes (MOM) en mi tesis, donde se generan tipos específicos de objetos orientados a objetos en un lado como su solicitud, y compilados y ejecutados en el otro lado como su respuesta .

paradisonoir
fuente
6

Apache Camel usado junto con ActiveMQ es una excelente manera de hacer patrones de integración empresarial

Rob Davies
fuente
5

Hemos utilizado la mensajería para generar presupuestos en línea.

bluegene
fuente
4

Estamos utilizando JMS para la comunicación con sistemas en una gran cantidad de sitios remotos a través de redes poco confiables. El acoplamiento suelto en combinación con mensajes confiables produce un panorama estable del sistema: cada mensaje se enviará tan pronto como sea técnicamente posible, los problemas más grandes en la red no tendrán influencia en todo el panorama del sistema ...

roundrobin
fuente