8

優先度を設定して MSMQ でメッセージを送信しています。C# を使用して

優先度の高い MSMQ からのメッセージを最初に取得できますか?

プライオリティ キューに入るのと同じように。

そしてもう一つ..

3 つの優先レベルがあるとします。

0 - 高 1 - 中 2 - 低

キュー内のシーケンスは 2001122221111100 です

優先度の高い(0)メッセージを送信すると、どこに配置されますか?? MSMQ で優先度を設定します。実際のプライオリティ キューのように動作しますか?

4

1 に答える 1

12

MSMQ はメッセージの優先キューイングをサポートしていますが、同じ優先度のメッセージはキューから取り出されるときに到着順に処理されます。たとえば、3 つのメッセージ (優先度 7 の 2 つと優先度 0 の 1 つ) を送信すると、最初に受信した優先度 7 のメッセージがキューから取り出され、次に受信した優先度 7 の 2 番目のメッセージが続き、最後に次のメッセージが続きます。優先度 0。キューに入れられたメッセージを優先度順に処理するために特別なことをする必要はありません...ただし、特定の優先度の「最も古い」メッセージは、同じ優先度の「最新の」メッセージの前にキューから取り出されることに注意してください。また、すべてのトランザクション メッセージは優先度 IIRC を無視することに注意してください。

編集:

MSMQ は優先度をサポートしていますが、優先度キューとまったく同じようには動作しません。この 2 つは異なるアルゴリズムであり、MSMQ は非常に複雑です。メッセージの優先度を設定すると、そのメッセージがキューから取り出される順序を決定するのに役立つだけでなく、そのメッセージが MSMQ サービスを介して送信者/発行者から受信者/購読者に伝達される優先度にも影響します。3 つの最低優先度 (MSMQ は 0 (最低) から 7 (最高) までの 8 つの優先度をサポートする) を使用すると仮定すると、次のシナリオが発生する可能性があります。

0 = 低、1 = 中、2 = 高

送信者は、指定された時間 (分:秒) に指定された優先順位でメッセージを送信します。

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

受信者は、メッセージを次の順序でキューに入れます (メッセージがキューから取り出されないと仮定します)。

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

受信者のキューからのメッセージを処理する場合、メッセージは優先順位と受信時間の両方で処理されます。

于 2009-08-21T07:15:26.840 に答える