2010-05-13 22 views
8

Supongamos que tiene una cola JMS y varios consumidores miran la cola de mensajes. Desea que uno de los consumidores obtenga todo un tipo particular de mensaje, por lo que decide emplear message selectors.JMS: ¿Cómo funcionan los selectores de mensajes con múltiples consumidores de cola y tema?

Por ejemplo, define una propiedad para ir en el encabezado de su mensaje JMS llamado targetConsumer. Su selector de mensajes, que aplica al consumidor conocido como A, es algo así como WHERE targetConsumer = 'CONSUMER_A'.

Está claro que el consumidor A ahora solo captará los mensajes con el conjunto de propiedades como está en el ejemplo. Sin embargo, ¿los otros consumidores tendrán conciencia de eso? IOW, ¿otro consumidor, sin restricciones por un selector de mensajes, tomará los mensajes CONSUMER_A, si mira la cola antes del consumidor A? ¿Tengo que aplicar selectores de mensajes como, WHERE targetConsumer <> 'CONSUMER_A' a los demás?

Estoy RTFM y recogiendo datos empíricos ahora, pero esperaba que alguien lo supiera por la parte superior de su cabeza.

Respuesta

7

Cuando varios consumidores usan la misma cola, los selectores de mensajes deben configurarse correctamente entre estos consumidores para que no haya conflicto en la determinación del consumidor previsto.

En el caso de los beans controlados por mensajes (un consumidor de mensajes JMS), el selector se puede especificar en el archivo ejb-jar.xml permitiendo de ese modo que la configuración se realice en el momento del despliegue (en lugar del opuesto vista de especificar el selector de mensajes durante el desarrollo).

Editar: En la vida real, esto tendría sentido cuando diferentes consumidores son responsables de procesar los mensajes que contienen los mismos encabezados (a menudo generados por el mismo productor) escritos en la misma cola. Por ejemplo, los selectores de mensajes se pueden usar en una aplicación comercial, para diferenciar entre órdenes de compra y venta, cuando el productor es incapaz de escribir los mensajes JMS en dos colas de compra y venta separadas.

+0

No veo cómo está respondiendo la pregunta. ¿Quiere decir que en el escenario descrito anteriormente, un consumidor de mensajes sin restricciones recibirá mensajes de CONSUMER_A? –

0

Sí, otro consumidor que no utiliza ningún selector de mensajes recibirá el mensaje destinado al consumidor A (o para el caso, cualquier mensaje en la parte superior de la cola). Por lo tanto, al compartir una cola, las aplicaciones de los consumidores deben ser disciplinadas y elegir solo aquellos mensajes destinados a ellas.

0

El 'primer' consumidor de mensajes JMS de una cola recogerá el mensaje si el selector coincide. Lo que 'primero' significa es un detalle de implementación (podría ser round-robin, basado en prioridad o proximidad de red). Por lo tanto, cuando utilice selectores en colas, debe asegurarse de que estos selectores no se superpongan.

De manera más formal: no debe existir mensaje que coincide con 2 selectores en la misma cola

Ésta es otra desventaja de colas frente a los temas - en la práctica siempre se debe considerar el uso de temas en primer lugar. Con un tema, cada consumidor que hace juego recibe el mensaje.

Cuestiones relacionadas