2009-08-21 20 views
8

invio messaggi in MSMQ impostando la sua priorità. utilizzando C#Richiesta messaggio prioritario da MSMQ

posso ottenere il messaggio da MSMQ con priorità alta prima?

proprio come si entra in Priorità.

e un'altra cosa ..

Supponiamo che ci sono tre livelli di priorità

0 - alta 1- medio 2 - basso

la sequenza in coda è 2001122221111100

ora se invio un messaggio con priorità alta (0) dove verrà posizionato ?? impostando la priorità in MSMQ. si comporterà come l'effettiva coda prioritaria?

risposta

12

MSMQ supporta l'accodamento prioritario dei messaggi, tuttavia i messaggi con la stessa priorità vengono gestiti in ordine di arrivo al momento della rimozione. Ad esempio, se si inviano 3 messaggi, due di priorità 7 e uno di priorità 0, il primo messaggio di priorità 7 che è stato ricevuto verrà rimosso dalla coda, seguito dal secondo messaggio di priorità 7 che è stato ricevuto, infine seguito dal messaggio priorità 0. Non dovresti fare nulla di speciale per elaborare i messaggi in coda nel loro ordine di priorità ... tuttavia tieni presente che il messaggio "più vecchio" di qualsiasi priorità data verrà rimosso dalla coda prima del messaggio "più recente" con la stessa priorità. Va inoltre notato che tutti i messaggi transazionali ignorano la loro priorità, IIRC.

EDIT:

Mentre MSMQ sostiene le priorità, che verrà non si comportano esattamente come una coda di priorità. I due sono algoritmi diversi, con MSMQ notevolmente più complesso. Quando si imposta la priorità di un messaggio, non solo lo aiuto determina l'ordine in cui quel messaggio verrà rimosso dalla coda, ma influisce anche sulla priorità con cui tale messaggio si propagherà attraverso il servizio MSMQ da mittente/editore a destinatario/sottoscrittore . Supponendo che si utilizzano le tre priorità più bassi (MSMQ supporta 8 priorità, da 0 (minimo) a 7 (più alto)), si potrebbe verificare il seguente scenario:

0 = basso, 1 = medio, 2 = alta

mittente invia i messaggi con le priorità indicate negli orari specificati (minuti: secondi):

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

ricevitore code dei messaggi in coda nel seguente ordine (supponendo che non messaggi sono levati dalla coda):

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

Quando si elaborano i messaggi dalla coda del destinatario, questi verranno elaborati sia in ordine di priorità, sia in base all'ora ricevuta.

+0

supponiamo che ci siano due messaggi basso, alto e arriva un nuovo messaggio con priorità "massima". dove sarà posizionato? e questo messaggio verrà prima dequisito? – Mohsan

+0

In base alla tua domanda modificata, penso che tu abbia valori di priorità al contrario. In MSMQ, maggiore è il numero di priorità, maggiore è la priorità. Ciò renderebbe 0 = basso, 1 = medio, 2 = alto. Nel caso in cui desiderassi una priorità "più alta" aggiuntiva, avresti 3 = il più alto. Se arriva un messaggio con priorità 3 (il più alto), dovrebbe essere rimosso prima dalla coda, prima di ogni altro messaggio con una qualsiasi delle altre tre priorità elencate. – jrista

+0

Nota finale ... MSMQ non si comporterà mai esattamente come una coda di priorità. Una coda di priorità è un algoritmo molto più semplice dell'ordinamento dei messaggi di MSMQ. Si prega di vedere la mia risposta aggiornata per una migliore descrizione di come MSMQ gestisce i messaggi in attesa di essere rimossi dalla coda. – jrista

Problemi correlati