tutorial example ejemplo colombia colas cola java jms message-queue

java - example - Uso en el mundo real de JMS/colas de mensajes?



jms java ejemplo (11)

Solo estaba leyendo acerca de JMS y Apache ActiveMQ. ¿Y me estaba preguntando en qué uso del mundo real la gente ha utilizado JMS o tecnologías de cola de mensajes similares?


Úselos todo el tiempo para procesar operaciones de larga ejecució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 e inmediatamente devolver una URL que el usuario puede verificar para ver cuando finaliza el trabajo.

Publicar / suscribir 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.


Estamos utilizando JMS para la comunicación con sistemas en una gran cantidad de sitios remotos sobre redes no confiables. El acoplamiento flexible en combinación con mensajes confiables produce un paisaje de sistema estable: 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 ...


He tenido tantos usos increíbles para JMS:

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

  • Depuración de inicio de sesión en el backend. Todos los servidores de aplicaciones transmitieron mensajes de depuración en varios niveles. Entonces, se podría iniciar un cliente JMS para ver si hay mensajes de depuración. Claro que podría haber usado algo como syslog, pero esto me dio todo tipo de formas de filtrar los resultados basados ​​en información contextual (por ejemplo, nombre del servidor de aplicaciones, llamada de 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 las piezas específicas se extrajeron usando filtros y se registraron en el archivo para el registro general.

  • Alertando De nuevo, una configuración similar al registro anterior, para detectar errores específicos y alertar a las personas a través de diversos medios (correo electrónico, mensaje de texto, IM, Growl pop-up ...)

  • Configuración y control dinámicos de clústeres de software. Cada servidor de aplicaciones transmitiría un mensaje de "configúrame", luego un daemon 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 que sus configuraciones cambiaran a la vez, se podría hacer desde el daemon de configuración.

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

Es ideal en cualquier lugar que desee para garantizar la entrega de mensajes de forma asincrónica.


He visto a JMS usarse en diferentes proyectos comerciales y académicos. JMS puede aparecer fácilmente en su imagen, siempre que quiera 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 el remitente ninguna 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 los tipos específicos de objetos orientados a objetos se generan en un lado como su solicitud, y compilados y ejecutados en el otro lado como su respuesta .


Hemos utilizado mensajes para generar cotizaciones en línea


JMS (ActiveMQ es una implementación de intermediario JMS) se puede usar como un mecanismo para permitir el procesamiento asíncrono de solicitudes. 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 múltiples 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 colocar ese orden (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)
  • Envía un correo electrónico al cliente para informarle que su pedido ha sido enviado

Para hacer esto, su código de 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, mirando el pedido en la base de datos y luego haciendo el 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.


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

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


Lo he usado para mi proyecto académico, que era un sitio web minorista en línea similar a Amazon. JMS se usó 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 hizo mediante el envío continuo de mensajes a JMS Queue.
  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, envíe un evento de entrega.

También tuvimos múltiples clientes remotos 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 coherencia de los datos, implementamos un mecanismo de 2PC. Para esto, usamos 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.


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 las compras sería "notificar a la tienda de cosas". Hacemos que la llamada de notificación sea asíncrona de modo que cualquier lógica / procesamiento que esté involucrado en la llamada de notificación no bloquee ni controle los recursos con la lógica comercial de compra. Resultado final, compra completa, el usuario está contento, obtenemos nuestro dinero y como la cola garantiza la entrega, la tienda recibe una notificación tan pronto como se abre o tan pronto como hay un nuevo artículo en la cola.


Apache Camel utilizado en conjunto con ActiveMQ es una excelente manera de hacer Patrones de Integración Empresarial


Computación síncrona distribuida (a).
Un ejemplo del mundo real podría ser un marco de notificación de toda la aplicación, que envíe correos a los interesados ​​en diversos puntos durante el uso de la aplicación. Entonces, la aplicación actuaría como un Producer creando un objeto Message , colocándolo en una Queue particular y avanzando.
Habría un grupo de Consumer que se suscribirían a la Queue en cuestión y se encargarían del manejo del Message enviado. Tenga en cuenta que durante el curso de esta transacción, los Producer están desacoplados de la lógica de cómo se manejará un Message determinado.
Los marcos de mensajes (ActiveMQ y "me gusta") actúan como una red troncal para facilitar tales transacciones de Message al proporcionar MessageBroker .