Uso en el mundo real de JMS / colas de mensajes? [cerrado]


Estaba leyendo abit sobre JMS y Apache ActiveMQ. Y se preguntaba para qué uso en el mundo real la gente aquí ha usado JMS o tecnologías de cola de mensajes similares ?

Author: nos, 2009-06-24

11 answers

JMS (ActiveMQ es una implementación de broker JMS) se puede usar como un mecanismo para permitir el procesamiento de solicitudes asincrónicas. Es posible que desee hacer esto porque la solicitud tarda mucho tiempo 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 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 realizar ese pedido (y almacenarlo en una base de datos) es posible que desee llevar a cabo una serie de tareas adicionales:

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

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

 165
Author: Jon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-24 00:54:59

Utilícelos todo el tiempo para procesar operaciones de larga duración de forma asíncrona. Un usuario web no querrá esperar más de 5 segundos para que se procese una solicitud. Si tiene uno que se ejecuta más tiempo que eso, un diseño es enviar la solicitud a una cola y devolver inmediatamente una URL que el usuario pueda verificar para ver cuando el trabajo haya terminado.

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.

 88
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-24 00:34:10

He tenido muchos usos increíbles para JMS:

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

  • Depurar el registro en el backend. Todos los servidores de aplicaciones emitieron mensajes de depuración en varios niveles. Un cliente JMS podría entonces ser lanzado para observar los 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 basada en información contextual (por ejemplo, por nombre del servidor de la aplicación, llamada a la api, nivel de registro, id de usuario, mensaje tipo, etc...). También coloreé la salida.

  • Depurar el registro en el archivo. Al igual que anteriormente, solo las piezas específicas se extrajeron utilizando filtros y se registraron en el archivo para el registro general.

  • Alerta. Una vez más, una configuración similar a la anterior registro, ver si hay errores específicos y alertar a las personas a través de varios medios (correo electrónico, mensaje de texto, mensajería instantánea, Growl pop-up...)

  • Configuración dinámica y control de clústeres de software. Cada servidor de aplicaciones emitiría una mensaje "configure me", luego un demonio de configuración que respondería con un mensaje conteniendo todo tipo de información de configuración. Más tarde, si todos los servidores de aplicaciones necesitaban cambiar sus configuraciones a la vez, se podía hacer desde el demonio de configuración.

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

Es genial en cualquier lugar que desee garantizar la entrega de mensajes de forma asíncrona.

 69
Author: mikesomeone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-23 16:52:25

Computación distribuida (a)síncrona.
Un ejemplo del mundo real podría ser un marco de notificación de toda la aplicación, que envía correos a las partes interesadas en varios puntos durante el curso del uso de la aplicación. Así que la aplicación actuaría como un Producer creando un objeto Message, colocándolo en un Queue particular, y avanzando.
Habría un conjunto de Consumer s que se suscribirían al Queue en cuestión, y se encargarían de manejar el Message enviado. Tenga en cuenta que durante el en el transcurso de esta transacción, los Producers se desacoplan de la lógica de cómo se manejaría un Message dado.
Los marcos de mensajería (ActiveMQ y similares) actúan como una columna vertebral para facilitar tales Message transacciones al proporcionar MessageBroker s.

 16
Author: pugmarx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-24 00:58:05

Lo he utilizado para enviar operaciones intradía entre diferentes sistemas de gestión de fondos. Si desea obtener más información sobre lo que es un gran mensaje de tecnología, puedo recomendar a fondo 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.

 9
Author: RichardOD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-06 20:42:19

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

Por ejemplo, digamos que tienes una pieza de 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 notify sea asíncrona para que cualquier lógica / procesamiento que esté involucrado en la llamada notify no bloquee o lidie con los recursos con la lógica de buy business. Resultado final, compra completa, el usuario está contento, recibimos nuestro dinero y debido a que la cola está garantizada la entrega de la tienda se notifica tan pronto como se abre o tan pronto como hay un nuevo elemento en la cola.

 8
Author: Kevin Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-25 02:44:18

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

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

También hemos implementado varios clientes remotos conectados al servidor principal. Si la conexión está disponible, que utilizan para acceder a la base de datos principal o si no utilizar su propia base de datos. Para manejar la consistencia de los datos, habíamos implementado 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 de nuevo un mensaje en la cola. Como otros ya han mencionado, esto era similar al modelo pub / sub.

 7
Author: qwerty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-19 09:27:00

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 ella sin/con dar al remitente cualquier información sobre el receptor.

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

 6
Author: paradisonoir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-06 20:37:16

Hemos utilizado la mensajería para generar Cotizaciones en línea

 4
Author: bluegene,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-24 02:46:20

Apache Camel utilizado junto con ActiveMQ es una gran manera de hacer Patrones de integración Empresarial

 4
Author: Rob Davies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-02 02:49:56

Estamos utilizando JMS para la comunicación con sistemas en un gran número de sitios remotos a través de redes poco confiables. El acoplamiento flexible en combinación con una mensajería confiable produce un paisaje 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 paisaje del sistema...

 2
Author: roundrobin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-07 08:28:12