2009-07-16 13 views
8

Para middleware orientado a mensajes que no admite mensajes de prioridad consistentemente (como AMQP) cuál es la mejor manera de implementar el consumo prioritario cuando las colas solo tienen semántica FIFO ? El caso de uso general sería un sistema en el que los consumidores reciben mensajes de mayor prioridad antes de los mensajes de menor prioridad cuando existe un gran retraso de mensajes en cola (s).En un sistema FIFO Qeueing, ¿cuál es la mejor manera de implementar mensajería de prioridad

+2

¿Puede tener varias colas? Si es así, sugeriría tener una cola separada para mensajes de alta prioridad que se consulta primero antes de la cola estándar, que solo se usa si la cola de prioridad está vacía. No sé si eso encaja con su escenario, pero esa fue mi primera idea. – CodeFusionMobile

+0

Estoy de acuerdo con CSharpWithJava. Estoy haciendo una gran aplicación de mensajería en este momento, y creo que a partir de sus preguntas, necesita múltiples colas, por lo que puede descargar los mensajes de baja pri a una lista de precios más baja, y leer la alta pri inmediatamente. –

Respuesta

10

Dado que solo se admite FIFO para una cola determinada, por supuesto deberá introducir múltiples colas, un intermediario o un consumidor más complejo.

Se pueden gestionar varias colas de varias formas. El productor y el consumidor podrían acordar tener dos colas entre ellos, uno para alta prioridad y otro para tareas en segundo plano.

Si su productor está restringido a una sola cola, pero tiene control sobre el consumidor, considere la posibilidad de introducir un enrutador de despliegue en la ruta. Entonces productor-> Enrutador es una sola cola, y el enrutador tiene dos colas para el consumidor.

Otra forma de abordarlo, que probablemente sea menos que ideal, sería hacer que el consumidor mueva un hilo al frente de la cola y luego despachar el trabajo internamente. Algo así como la versión anterior del enrutador, pero dentro de una sola aplicación. Esto tiene la desventaja de tener múltiples mensajes en vuelo dentro de su aplicación, lo que puede complicar la recuperación en caso de falla.

No olvide considerar la inanición de los eventos de baja prioridad, sean los que sean, si algunos de ellos se deben procesar incluso si todavía hay eventos de mayor prioridad.

+1

Esto es más o menos exactamente con quién hemos implementado esta estrategia para un proyecto en funcionamiento. Varias colas para un sistema de prioridad gradual. No nos preocupamos demasiado por la inanición porque podemos republicar mensajes importantes de menor prioridad con mayor prioridad en tales casos; el trabajo redundante se maneja, en su mayor parte, ideopotentemente para permitir esto. – quaternion

Cuestiones relacionadas