3

高速プロデューサー/低速コンシューマーのバリエーションである (MSMQ を使用した) メッセージングに問題があります。プライベート MSMQ キューで未処理の未消費メッセージ数を取得する方法はありますか? それを使用してプロデューサーを抑制したいと思います。

MSMQ でセマフォ パラダイムを使用したいと考えています。このパラダイムでは、未処理のメッセージ数が指定された数よりも少ない場合にのみプロデューサー アプリケーションがメッセージを送信します。

基本的に、私は次のようなことをしたいと思います

///Producer pseudo-code 
    public void SendMessage(Message message, int totalMessagesSentCounter)
    {
       if (totalMessagesSentCounter % 1000 == 0)
       {
         while (outgoingQueue.GetMessageCount() > X)  ///Is this possible?
         {
             Sleep(Y milliseconds);
         }
        }
       outgoingQueue.Send(Message);
       totalMessagesSentCounter++;
    }

私の構成:MSMQ 3.0でXP / 2003に勝つ

4

2 に答える 2

2

私は MSMQ 自体を使用したことはありませんが、便利なレシピがあります。

1 つのキューではなく、2 つのキュー (各方向に 1 つずつ) があります。

「プロデューサー」は、コンシューマーからのキューからアイテムを消費し、新しいメッセージをコンシューマーに送信します。コンシューマーが消費するたびに、プロデューサーへのキューに新しいメッセージを入れます。

このように、「トークン」はコンシューマーからプロデューサーにフィードバックを提供し、プロデューサーをコンシューマーの速度に調整します。

適切な場合の巧妙さは、毎回新しい割り当てではなく、単にメッセージを返すことです。単一プロセスのメッセージ データが大きく固定サイズである場合、これ自体がこの設計の採用を強力に後押しする可能性があります。

于 2010-02-04T16:49:14.657 に答える
1

MSMQ には COM ライブラリを使用する必要がありました。次のリンクが役に立ちました。

http://blog.codebeside.org/archive/2008/08/27/counting-the-number-of-messages-in-a-message-queue-in.aspx

于 2010-02-04T20:58:13.413 に答える