puerto - JMS Topic vs Queues
consumidor activemq (6)
Me preguntaba la diferencia entre un tema JMS Queue y JMS.
Desde la página ActiveMQ , dice
Temas
En JMS, un tema implementa la semántica de publicación y suscripción . Cuando publica un mensaje, va a todos los suscriptores que estén interesados, de modo que cero a muchos suscriptores recibirán una copia del mensaje. Solo los suscriptores que tenían una suscripción activa en el momento en que el agente recibe el mensaje recibirán una copia del mensaje.
Colas
Una cola JMS implementa la semántica del equilibrador de carga . Un solo mensaje será recibido por exactamente un consumidor. Si no hay consumidores disponibles en el momento en que se envía el mensaje, se mantendrá hasta que haya un consumidor disponible que pueda procesar el mensaje. Si un consumidor recibe un mensaje y no lo reconoce antes de cerrarlo, el mensaje se volverá a entregar a otro consumidor. Una cola puede tener muchos consumidores con carga de mensajes equilibrada entre los consumidores disponibles.
Estoy buscando tener una ''cosa'' que envíe una copia del mensaje a cada suscriptor en la misma secuencia en la que el mensaje fue recibido por el agente de ActiveMQ.
¿Alguna idea?
En cuanto a la conservación de la orden, consulte esta página de ActiveMQ . En resumen: el orden se preserva para consumidores individuales, pero con múltiples consumidores no se garantiza el orden de entrega.
Eso significa que un tema es apropiado. Una cola significa que un mensaje va a uno y solo un posible suscriptor. Un tema va para todos y cada uno de los suscriptores.
Los temas son para el modelo de editor-suscriptor, mientras que las colas son para punto a punto.
Queue es el objeto gestionado JMS utilizado para contener mensajes que esperan que los suscriptores consuman. Cuando todos los suscriptores consumieron el mensaje, el mensaje se eliminará de la cola.
El tema es que todos los suscriptores de un tema reciben el mismo mensaje cuando se publica el mensaje.
Si tiene N consumidores, entonces:
Los temas JMS entregan mensajes a N de N Las colas JMS entregan mensajes a 1 de N
Usted dijo que estaba "buscando tener una ''cosa'' que envíe una copia del mensaje a cada suscriptor en la misma secuencia en la que recibió el mensaje el intermediario ActiveMQ".
Por lo tanto, desea utilizar un tema para que todos los N suscriptores obtengan una copia del mensaje.
Un tema JMS es el tipo de destino en un modelo de distribución de uno a muchos. El mismo mensaje publicado es recibido por todos los suscriptores consumidores. También puede llamarlo modelo de "transmisión". Puede pensar en un tema como el equivalente de un Sujeto en un patrón de diseño Observer para computación distribuida. Algunos proveedores JMS eligen implementar esto como UDP en lugar de TCP. Para los temas, la entrega del mensaje es "disparar y olvidar": si nadie escucha, el mensaje simplemente desaparece. Si eso no es lo que quieres, puedes usar ''suscripciones duraderas''.
Una cola JMS es un destino de mensajes de 1 a 1. El mensaje es recibido solo por uno de los receptores consumidores (tenga en cuenta que el uso constante de suscriptores para ''clientes de tema y receptores para el cliente de cola evita confusiones). Los mensajes enviados a una cola se almacenan en el disco o la memoria hasta que alguien los recoge o caduca. Para que las colas (y suscripciones duraderas) necesiten una gestión de almacenamiento activa, debe pensar en consumidores lentos.
En la mayoría de los entornos, yo diría que los temas son la mejor opción porque siempre puede agregar componentes adicionales sin tener que cambiar la arquitectura. Los componentes adicionales podrían ser monitoreo, registro, análisis, etc. Nunca se sabe al comienzo del proyecto cuáles serán los requisitos en 1 año, 5 años, 10 años. El cambio es inevitable, abrázalo :-)