2008-12-22 28 views
6

En una aplicación web Java tengo una carga de mensaje recurrente de tipo A (por ejemplo, 20,000 cada hora). Luego tengo un segundo tipo de mensajes (tipo B) que aparecen ocasionalmente pero tienen una prioridad más alta que el tipo A (digamos, 3,000). Quiero poder procesar estos mensajes en una o más máquinas usando software de código abierto.Procesamiento de mensajes con prioridades

Me parece que podría hacer eso con JMS si tuviera un servidor JMS que envíe mensajes desde su cola en función de las prioridades (por ejemplo, envíe tres mensajes de tipo B y uno de tipo A aunque todos los mensajes de tipo A se encuentran en la parte superior de la cola de mensajes).

¿Conoces un servidor JMS que pueda hacer eso? ¿O conoces otra forma de implementarlo?

Respuesta

2

Establezca la prioridad del mensaje cuando llame "enviar (..)" al MessageProducer (QueueSender, etc.). O bien, puede establecer la prioridad predeterminada en el MessageProducer de 0-9 (9 es el más alto). Establecer la prioridad en el mensaje en sí no funcionará. Está anulado por el productor.

Uri es correcto, independientemente de si se respeta o no la prioridad es específico de la implementación. Creo que OpenJMS generalmente respeta la prioridad lista para usar, pero no lo garantiza.

estados JMS Spec: "JMS does not require that a provider strictly implement priority ordering of messages; however, it should do its best to deliver expedited messages ahead of normal messages."

6

El estándar JMS admite prioridades de mensajes El valor predeterminado es 4, puede especificar otros). Creo que debe configurar eso en el productor del mensaje Y en el mensaje en sí (hay métodos en ambos).

Creo que ActiveMQ no lo admite.

Sin embargo, muchos intermediarios JMS tienen la gestión de prioridad deshabilitada de forma predeterminada. Existe un indicador que puede necesitar cambiar, algo así como "supportJMSPriority", en algún lugar de la configuración del intermediario.

Además, Apache Camel le permite escribir sus propios resecuenciadores de mensajes para que pueda implementar cualquier forma de prioridad que desee.

0

Por qué no considerar el uso de otro MDB para procesar otro tipo de mensaje de forma explícita. Los detalles de prioridad anteriores aún se aplican, además, tendrá más control sobre el procesamiento simultáneo para cada tipo de mensaje.

Para la mayoría de las situaciones, prefiero 1 mdb o receptor de mensajes por tipo de mensaje. De esta manera si se retrotrae una transacción se puede saber inmediatamente qué tipo de mensaje que causó el problema

Karl

0

Se puede usar más de un tema. Incluso con las prioridades, si su procesador está atado procesando un mensaje de menor prioridad, no detendrá lo que está haciendo.

Si tiene procesadores por separado, un mensaje de alta prioridad puede comenzar a procesarse tan pronto como se pueda entregar, sin esperar a que se procese ningún otro mensaje.

Cuestiones relacionadas