2011-06-15 13 views
13

Tengo este escenario: Un cliente envía un mensaje a una instancia de cola msmq y hay 3 procesos que escuchan en esta cola. Quiero poder permitir que cada una de esas instancias seleccione un mensaje diferente y lo procese.MSMQ uno (cola) para muchos (oyentes) escenario

Sé que es un escenario de uso común para colas y ya tengo código de trabajo para esto usando MSMQ, .NET y C#.

Sin embargo, me pregunto si msmq es mi mejor opción aquí - la documentación establece claramente que MSMQ está destinado a la comunicación "uno a uno", lo que significa que no debe haber más de un oyente.

Eso me deja preguntándome, ¿es lo que estoy haciendo la solución correcta para mi caso de uso? ¿O es al revés, tengo que crear una cola por oyente y distribuir los mensajes en una parte anterior del flujo de trabajo?

Un enlace a un ejemplo de trabajo que demuestre el uso de MSMQ en este tipo de escenario sería muy apreciado.

Gracias

Respuesta

8

Según tengo entendido, está utilizando múltiples oyentes para hacer algo así como el equilibrio de carga. Este es un escenario absolutamente válido y se usa a menudo en entornos agrupados o en escenarios de equilibrio de carga donde un solo oyente no puede consumir todos los mensajes entrantes. Por cierto. el BizTalk agrupado consume mensajes MSMQ de la misma manera.

El uno a uno se entiende como un mensaje que se pasa a un oyente, pero no significa que cada cola solo puede tener un solo oyente. Si todos los oyentes hacen el mismo procesamiento y no depende de cuál seleccionará el mensaje, sigue siendo uno a uno.

También es posible utilizar una cola para enviar un mensaje a múltiples oyentes. Este escenario no se recomienda con MSMQ aunque técnicamente sea posible con desencadenadores.

Si sus oyentes solo escuchan mensajes con algunas propiedades especiales, identificando qué oyente debe consumir el mensaje (es decir, busca mensajes en la cola), definitivamente debe usar tres colas.

+3

Multidifusión es un mensaje para varias colas, no múltiples oyentes. –

+1

@John: Gracias, modifiqué mi respuesta. –

1

Parece que necesitan un bus de servicio - sin embargo, tienden a ser un poco pesado, por lo que podría ser excesiva. Con un bus de servicio, puede configurar escenarios de publicación y suscripción en los que cualquier número de oyentes puede suscribirse a los mensajes. NServiceBus es un bus de servicio que es algo simple de usar (y está construido sobre MSMQ); hay una versión gratuita que tiene un límite de 30 mensajes por segundo. Rhino ESB también dice ser liviano.

4

"la documentación indica claramente que MSMQ está destinado a la comunicación" uno a uno ", lo que significa que no debe haber más de un oyente".

¿Tiene un enlace para esto?

MSMQ utiliza dos métodos de entrega: 1-1
: un emisor, una cola de destino
1-M: un emisor de multidifusión a muchas colas de destino

También, usted puede tener múltiples oyentes en una cola. La cantidad de oyentes depende de usted. Por supuesto, habrá contención entre múltiples oyentes, por lo que si desea que los mensajes se procesen solo una vez que necesita codificar/configurar para eso.

+0

Me gustaría ver un código de trabajo que demuestre la "mejor práctica" de implementar este escenario: "Además, puede tener múltiples oyentes en una cola. El número de oyentes depende de usted. Por supuesto, habrá contención entre múltiples oyentes así que si quieres que los mensajes se procesen solo una vez que necesites codificar/configurar para eso ". Para el enlace, actualmente estoy buscando. – UrbanEsc

+0

Tristemente, soy un especialista en infraestructura de MSMQ que no codifica. –

+0

Me gustaría marcar el suyo como una respuesta también, ya que agrega a Ladislav Mrnka responder, pero desafortunadamente eso no funciona :(También he intentado encontrar el enlace en msdn que reclama el escenario 1-1 que originalmente desencadenó esta pregunta, desafortunadamente no puedo encontrarlo más. – UrbanEsc

Cuestiones relacionadas