Tema JMS vs Colas


191

Me preguntaba cuál es la diferencia entre una cola JMS y un tema JMS.

La página de 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, por lo que de 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 corredor recibe el mensaje recibirán una copia del mensaje.

Colas

Una cola JMS implementa la semántica del equilibrador de carga . Se recibirá un solo mensaje 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 del cierre, el mensaje se volverá a entregar a otro consumidor. Una cola puede tener muchos consumidores con carga de mensajes equilibrada entre los consumidores disponibles.

Quiero tener 'algo' que envíe una copia del mensaje a cada suscriptor en la misma secuencia en la que recibió el mensaje el agente de ActiveMQ.

¿Alguna idea?

Respuestas:


147

Eso significa que un tema es apropiado. Una cola significa que un mensaje va a un único suscriptor posible. Un tema va a todos y cada uno de los suscriptores.


44
¿Alguna idea de cómo funciona el equilibrio de carga para las colas en JMS o WSO2 MB?
Kulasangar

eso es interesante porque estaba tratando de depurar algún suscriptor y cuando enviaba un tema no se llamaba al suscriptor, pero al enviarlo a la cola funcionaba
vmrvictor

54

Los temas son para el modelo editor-suscriptor, mientras que las colas son para punto a punto.


31

Un tema de JMS es el tipo de destino en un modelo de distribución de 1 a muchos. Todos los suscriptores consumidores reciben el mismo mensaje publicado . También puede llamar a esto el modelo de 'transmisión'. Puede pensar en un tema como el equivalente de un Sujeto en un patrón de diseño de Observador para computación distribuida. Algunos proveedores de JMS eligen implementar esto de manera eficiente como UDP en lugar de TCP. Para los temas, la entrega del mensaje es "dispara y olvida": 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 1 a 1. El mensaje es recibido solo por uno de los receptores consumidores (tenga en cuenta: el uso constante de los suscriptores para los clientes del tema y los receptores para los clientes de la cola evita la confusión). Los mensajes enviados a una cola se almacenan en el disco o la memoria hasta que alguien los recoge o caduca. Entonces, las colas (y las suscripciones duraderas) necesitan una gestión de almacenamiento activa, debe pensar en consumidores lentos.

Yo diría que en la mayoría de los entornos, los temas son la mejor opción porque siempre puede agregar componentes adicionales sin tener que cambiar la arquitectura. Los componentes agregados pueden ser monitoreo, registro, análisis, etc. Al principio del proyecto, nunca se sabe cuáles serán los requisitos en 1 año, 5 años, 10 años. El cambio es inevitable, abrácelo :-)


28

Es tan simple como eso:

Colas = Insertar> Retirar (enviar a un solo suscriptor) 1: 1

Temas = Insertar> Difusión (enviar a todos los suscriptores) 1: n

ingrese la descripción de la imagen aquí


2
Un ejemplo puede ser para una red social simple. A alguien le gusta una publicación. El backend publica un evento 'POST LIKE' para el tema. Lo consumen 3 suscriptores: notificationProcessor(envía una notificación al afiche), karmaProcessor(le da karma al aficionado y al afiche), feedProcessor(mueve el jota hacia arriba en los feeds de las personas). Todo asíncrono por supuesto.
Siddhartha

@Siddhartha, esta podría ser una respuesta envuelta en un ejemplo, ¡gracias!
selem mn

8

En cuanto a la preservación del pedido, consulte esta página de ActiveMQ . En resumen: el pedido se conserva para consumidores individuales, pero con varios consumidores el pedido de entrega no está garantizado.


7

Colas

Pros

  • Patrón de mensajería simple con un flujo de comunicación transparente.
  • Los mensajes se pueden recuperar volviendo a ponerlos en la cola

Contras

  • Solo un consumidor puede recibir el mensaje
  • Implica un acoplamiento entre productor y consumidor, ya que es una relación uno a uno

Temas

Pros

  • Múltiples consumidores pueden recibir un mensaje
  • Desacoplamiento entre productor y consumidores (patrón de publicación y suscripción)

Contras

  • Flujo de comunicación más complicado.
  • No se puede recuperar un mensaje para un solo oyente

4

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 está "buscando tener una 'cosa' que enviará una copia del mensaje a cada suscriptor en la misma secuencia en la que recibió el mensaje el agente de ActiveMQ".

Por lo tanto, desea utilizar un tema para que todos los suscriptores de N reciban una copia del mensaje.


1

TEMA :: el tema es comunicación de uno a muchos ... (multipunto o publicación / suscripción) EJ: -imagine que un editor publique la película en el youtub y luego todos sus suscriptores recibirán una notificación ... QUEVE :: queve es one-to -una comunicación ... Ej .: -Cuando publique una solicitud de recarga, irá a un solo receptor q ... recuerde siempre que si la solicitud pasa a todos los receptores q, se produjo una recarga múltiple, así que al desarrollar el análisis es adecuado para una aplicación


-1

La cola es un objeto administrado JMS que se utiliza para retener 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.


2
Los mensajes de la cola solo serán consumidos una vez por un solo consumidor, es por eso que una cola implementa un equilibrador de carga. Las suscripciones temáticas pueden ser duraderas : el suscriptor puede recibir el mensaje mucho después de la publicación (si el suscriptor se cerró y vuelve a aparecer, por ejemplo).
Gruber
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.