2009-08-21 15 views
8

Wysyłam wiadomości w MSMQ, ustawiając jej priorytet. przy użyciu C#Uzyskiwanie wiadomości według priorytetu z MSMQ

Czy mogę uzyskać najpierw wiadomość o MSMQ o wysokim priorytecie?

podobnie jak w kolejce priorytetowej.

i jeszcze jedno ..

przypuszczać, istnieją trzy poziom priorytetu

0 - wysoka 1- średni 2 - niski

sekwencja w kolejce jest 2001122221111100

teraz jeśli wyślę wiadomość o wysokim priorytecie (0), gdzie zostanie ona umieszczona? ustawiając priorytet w MSMQ. czy będzie się zachowywać jak kolejka priorytetów?

Odpowiedz

12

Usługa MSMQ obsługuje priorytetowe kolejkowanie wiadomości, jednak wiadomości o tym samym priorytecie są obsługiwane w kolejności nadejścia po usunięciu z listy. Na przykład, jeśli wyślesz 3 wiadomości, dwa z priorytetem 7 i jeden z priorytetów 0, to pierwsza odebrana wiadomość o priorytecie 7 zostanie odjęta, a następnie odebrana druga wiadomość o priorytecie 7, po której następuje wiadomość Priorytet 0. Nie powinieneś robić nic specjalnego, aby przetwarzać wiadomości w kolejce w kolejności ich priorytetów ... jednak pamiętaj, że "najstarszy" komunikat o dowolnym priorytecie zostanie usunięty przed "najnowszym" komunikatem o tym samym priorytecie. Należy również zauważyć, że wszelkie komunikaty transakcyjne ignorują ich priorytet, IIRC.

EDIT:

Podczas MSMQ wspiera priorytety, nie będzie zachowywać się dokładnie tak, jak kolejki priorytetowej. Oba są różnymi algorytmami, przy czym MSMQ jest znacznie bardziej złożony. Po ustawieniu priorytetu wiadomości nie tylko ta pomaga ustalić kolejność odczytywania tej wiadomości, ale także wpływa na priorytet, w jakim ta wiadomość będzie propagowana za pośrednictwem usługi MSMQ od nadawcy/wydawcy do odbiorcy/subskrybenta. . Zakładając, że użyciu trzech najniższych priorytetów (MSMQ obsługuje 8 priorytetów od 0 (najniższe) do 7 (największe)), następujący scenariusz może wystąpić:

0 = niski, 1 = średni, 2 = wysoki

nadawca wysyła wiadomości z danych priorytetowych w określonym czasie (minuty: sekundy):

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

odbiornik kolejki się komunikatów w kolejce w następujący sposób (zakładając, że nie ma wiadomości z kolejki)

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

Podczas przetwarzania wiadomości z kolejki odbiorcy będą one przetwarzane w obu kolejnościach, a także w czasie.

+0

Załóżmy, że są dwa komunikaty: niski, wysoki i pojawia się nowa wiadomość z "najwyższym" priorytetem. gdzie zostanie umieszczony? i czy ta wiadomość zostanie najpierw zapisana? – Mohsan

+0

Na podstawie Twojego edytowanego pytania, myślę, że masz priorytetowe wartości do tyłu. W MSMQ im wyższy numer priorytetu, tym wyższy priorytet. Oznaczałoby to 0 = niski, 1 = średni, 2 = wysoki. Jeśli chciałbyś otrzymać dodatkowy "najwyższy" priorytet, miałbyś 3 = najwyższy. Jeśli pojawi się komunikat o priorytecie 3 (najwyższy), powinien najpierw zostać usunięty z kolejki, przed każdą inną wiadomością z dowolnym z trzech wymienionych priorytetów. – jrista

+0

Ostatnia uwaga ... MSMQ nigdy nie zachowa się dokładnie tak jak kolejka priorytetowa. Kolejka priorytetowa jest znacznie prostszym algorytmem niż porządkowanie komunikatów MSMQ. Zobacz moją zaktualizowaną odpowiedź, aby lepiej opisać, w jaki sposób MSMQ obsługuje wiadomości czekające na usunięcie. – jrista

Powiązane problemy