2009-08-21 16 views
8

Estoy enviando mensajes en MSMQ estableciendo su prioridad. utilizando C#Obteniendo mensaje por prioridad desde MSMQ

¿Puedo obtener primero el mensaje de MSMQ con alta prioridad?

al igual que en Priority Queue.

y una cosa más ..

supongamos que hay tres niveles de prioridad

0 - alta 1- medio 2 - low

la secuencia en la cola es 2001122221111100

ahora si envío un mensaje con alta prioridad (0) donde se colocará? estableciendo prioridad en MSMQ. ¿se comportará como la cola de prioridad real?

Respuesta

12

MSMQ admite colas de prioridad de mensajes, sin embargo, los mensajes con la misma prioridad se manejan en orden de llegada cuando se quitan de la cola. Por ejemplo, si envía 3 mensajes, dos de prioridad 7 y uno de prioridad 0, entonces el primer mensaje de prioridad 7 que se recibió será cancelado, seguido por el segundo mensaje de prioridad 7 que fue recibido, seguido finalmente por el mensaje prioridad 0. No debería tener que hacer nada especial para procesar los mensajes en cola en su orden de prioridad ... sin embargo, tenga en cuenta que el mensaje "más antiguo" de cualquier prioridad dada será quitado antes del mensaje "más nuevo" de la misma prioridad. También se debe tener en cuenta que los mensajes transaccionales ignoran su prioridad, IIRC.

EDIT:

Mientras MSMQ apoya las prioridades, no va a comportarse exactamente como una cola de prioridad. Los dos son algoritmos diferentes, y MSMQ es significativamente más complejo. Cuando establece la prioridad de un mensaje, no solo eso ayuda determina el orden en que ese mensaje será quitado de la cola, sino que también afecta la prioridad en la que ese mensaje se propagará a través del servicio MSMQ del remitente/editor al receptor/suscriptor . Asumiendo que utiliza las tres prioridades más bajas (MSMQ soporta 8 prioridades, de 0 (bajo) a 7 (más alto)), se puede producir el siguiente escenario:

0 = bajo, 1 = medio, 2 = alta

remitente envía mensajes con las prioridades dadas en los tiempos especificados (minutos: segundos):

0 @ 1:00 
2 @ 1:00 
0 @ 1:01 
1 @ 1:02 
1 @ 1:03 
0 @ 2:01 
2 @ 2:01 

receptor pone en cola los mensajes en su cola en el orden siguiente (suponiendo que no hay mensajes se desencolan):

2 @ 1:00 
2 @ 2:01 
1 @ 1:02 
1 @ 1:03 
0 @ 1:00 
0 @ 1:01 
0 @ 2:01 

Cuando procesa mensajes de la cola del receptor, se procesarán en orden de prioridad, así como en el tiempo recibido.

+0

supongamos que hay dos mensajes bajo, alto y aparece un mensaje nuevo con la prioridad "más alta". donde se colocará? ¿Y este mensaje se debe primero? – Mohsan

+0

Según su pregunta editada, creo que tiene valores prioritarios al revés. En MSMQ, cuanto mayor es el número de prioridad, mayor es la prioridad. Eso haría 0 = bajo, 1 = medio, 2 = alto. En el caso de que quisiera una prioridad "más alta" adicional, tendría 3 = más alto. Si aparece un mensaje con la prioridad 3 (el más alto), primero debe ser quitado de la cola, antes que cualquier otro mensaje con cualquiera de las otras tres prioridades enumeradas. – jrista

+0

Nota final ... MSMQ nunca se comportará exactamente como una cola de prioridad. Una cola de prioridad es un algoritmo mucho más simple que el orden de mensajes de MSMQ. Consulte mi respuesta actualizada para obtener una mejor descripción de cómo MSMQ maneja los mensajes que esperan ser eliminados. – jrista