したがって、シナリオは、SB キューを使用して、他のサービスへの発信コールバックを抑制しているというものです。他のサービスへのコールバックに関する標準的な問題の 1 つは、それらが制御不能な時間ダウンする可能性があることです。ターゲットがダウンしている/応答していないことを検出したと仮定すると、そのメッセージを破棄してキューにすぐに再表示されないようにするための最良のパターンは何ですか?
私が知っている、試した、または検討しているいくつかのアプローチを次に示します。
明らかに
BrokeredMessage::Abandon()
、メッセージを使用しただけではロックが解除され、キューに戻されます。これは、このシナリオと私が回避しようとしているものにとって明らかに望ましくありません。エラーが発生したという事実を無視して Abandon を呼び出さないと、すぐに表示されなくなりますが、再び表示されるまでの時間を細かく制御することはできず、実装したいと思います減衰再試行戦略。
BrokeredMessage::Abandon(IDictionary<string, object>)
プロパティを呼び出して何らかの形で更新できるのではないかと思いScheduledEnqueueTimeUTC
ましたが、これを試してみましたが、メッセージの最初の送信以外にそのプロパティに影響を与える方法はないようです。理にかなっていますが、試してみる価値があると思いました。この状況で使用
BrokeredMessage::Complete()
するだけで、実際にはプロパティ セットを使用してメッセージの新しいコピーをキューに入れることを検討しました。ScheduledEqueueTimeUTC
最後の箇条書きはややこしすぎるように思えますが、キューの固有の性質を考えると、おそらく正しい答えであるという結論に達しています。不足している Azure SB キュー内でこれを行うためのより良い方法があるかもしれないと考えました。