3

私のワーカーロールの実行方法は次のとおりです。

public override void Run()
{
    Message msg=null;
    while (true)
    {

        msg = queue.GetMessage();
        if(msg!=null && msg.DequeueCount==1){
             //delete message
             ...
             //execute operations
             ...
        }
        else if(msg!=null && msg.DequeueCount>1){
             //delete message
             ...
        }
        else{
             int randomTime = ...
             Thread.Sleep(randomTime);                 
        }
    }
}

パフォーマンス テストでは、ワーカーだけがメッセージを分析できるようにします (ワーカーの障害の問題は考慮していません)。

しかし、私のテストでは、2 つのワーカーが同じメッセージを受け取り、DequeueCount が 1 に等しい (両方のワーカー) を読み取ることができるようです。出来ますか?

ワーカーだけが「ミューテックス」の方法でメッセージを読み取れるようにする方法はありますか?

4

1 に答える 1

1

「getAMessage(queue)」メソッドはどのように定義されていますか? PeekMessage()を実行すると、メッセージはすべてのワーカーに表示されます。GetMessage()を実行すると、最初にメッセージを取得したワーカーのみがメッセージを取得します。ただし、非表示タイムアウトについては、指定またはデフォルト (30 秒) のいずれかです。非表示タイムアウトになる前に、メッセージを削除する必要があります。

詳細については、キュー サービス APIを確認してください。あなたのコードに何か問題があると確信しています。私はキューを使用しており、開発ストレージと運用ストレージでドキュメントのように動作します。GetMessageを実行するときに、 Visibility Timeoutの値を明示的に高くしたい場合があります。また、可視性タイムアウトよりも長く眠らないようにしてください。

于 2012-02-03T12:19:28.740 に答える