Microsoft Service Bus でデッド レター キューを使用してプロジェクトをテストしています。私は 26 個のメッセージ (アルファベットを表す) を送信し、メッセージを受信すると、メッセージの一部を無作為にデッド レター キューに入れるプログラムを使用します。メッセージは常にデッド レター キューからピーク モードで読み取られるため、そこに到達するとそこにとどまります。数回実行すると、26 個のメッセージすべてが配信不能キューに入れられ、常にそこに残ります。
ただし、それらを読み取るときは、いくつか (たとえば 6 つ) だけが読み取られることもあれば、26 個すべてが読み取られることもあります。
次のコマンドを使用します。
const int maxToRead = 200; // It seems one wants to set this higher than
// the anticipated load, obtaining only some back
IEnumerable<BrokeredMessage> dlIE =
deadletterSubscriptionClient.ReceiveBatch(maxToRead);
タイムアウトのある ReceiveBatch のオーバーロードがありますが、これは役に立たず、おそらく複雑さを増すだけです。
「ピーク」モードで使用され、メッセージがそこにとどまっているため、毎回 26 個のメッセージすべてを取得しないのはなぜですか。
「Service Bus Explorer」を使用して、すべてのメッセージが配信不能キューにあり、そこに残っていることを実際に確認できます。
これは主にテストの例ですが、「ReceiveBatch」が非常に(悪い)ランダムな方法ではなく、決定論的なモードで機能することを願っています...