2009-08-21 9 views
8

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

私はMSMQから優先度の高いメッセージを受け取ることができますか?

優先度キューに入るのと同じです。

と一つのこと詳細..

は、3つの優先度

0があると仮定 - 高 の1-中 2 - 低

キュー内のシーケンスが今2001122221111100

です優先度の高いメッセージを送信すると(0)、どこに配置されますか? MSMQで優先順位を設定します。それは実際の優先待ち行列のように振る舞うでしょうか?

答えて

12

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

EDIT:MSMQは優先順位をサポートしていますが

、それは正確にプライオリティキューのように動作しません。 2つは異なるアルゴリズムであり、MSMQはかなり複雑です。メッセージの優先順位を設定すると、ヘルプは、そのメッセージがデキューされる順序を決定するだけでなく、そのメッセージが送信者/発行元から受信者/購読者にMSMQサービスを介して伝播される優先度にも影響します。

0 =低、1 =中、=高

2:あなたは3つの最低優先順位(MSMQが8つの優先順位、0から(最低)〜7(最高)をサポート)、次のシナリオが発生する可能性がありますを使用すると仮定すると、送信者は、(分:秒):指定された時間に与えられた優先順位でメッセージを送信し

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 
を3210

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

+0

低、高 という2つのメッセージがあり、「最高」の優先度を持つ新しいメッセージがあるとします。それはどこに置かれますか?このメッセージは最初に否定されますか? – Mohsan

+0

あなたの編集した質問に基づいて、私はあなたが優先順位値を後方に持っていると思います。 MSMQでは、優先度が高いほど優先度が高くなります。それは0 =低、1 =中、2 =高にするでしょう。追加の「最高」の優先度が必要な場合は、3 =最高となります。メッセージの優先度が3(最高)になった場合は、他の3つの優先度のいずれかが指定されたメッセージの前に、最初にデキューされます。 – jrista

+0

最終的なメモ... MSMQは、優先キューとまったく同じように動作しません。優先度キューは、MSMQのメッセージ順序付けよりもはるかに単純なアルゴリズムです。デキュー待ちのメッセージをMSMQがどのように処理するかについては、最新の回答を参照してください。 – jrista

関連する問題