2016-07-05 8 views
-1

私たちは、空白のサービスバスを使用して、キューを待機しているワーカーによるメッセージの並列処理を容易にしています。Azureリクエストレスポンスセッションタイムアウト処理

最初に集約されたメッセージが受信され、このメッセージは、個別のプロセスを実行するためにすべてのメッセージがいつ完了したかを知る必要があるため、要求 - 応答パターンによってポストされた数千の個別メッセージに分割されます。

は、我々が処理されるべき1000件のメッセージを投稿するとしましょう、唯一の労働者のリスニングがある:

私たちの問題は、要求応答方法は、次の問題を引き起こしているタイムアウトを持っていることです。タイムアウト期限切れ後にキューに残ったメッセージは破棄されますが、これは不要なものです。すべてのメッセージが処理されることを保証する大きな値に有効期限を設定すると、メッセージが失敗し、何かが間違っていることを理解するためにタイムアウトを待たなければならないリスクが発生します。

リクエスト/レスポンスシナリオやその他の考慮すべきパターンにおいて、1つのメッセージの有効期限を動的に変更する方法はありますか?

ありがとうございます!

答えて

0

あなたは間違ったことを持っています。空白のサービスバスメッセージの生きる時間https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.timetolive.aspxメッセージが消費されるかどうかにかかわらず、メッセージがキューに入る時間です。

これはタイムアウトではありません。長い時間メッセージを投稿するとメッセージは長時間キューに残りますが、消費に失敗した場合は消費しなかったことを警告する必要がありますこのメッセージ。

これは、別のキューを使用して、このメッセージキューに別のメッセージを入れ、失敗したメッセージIDとそのエラーを持つことができます。

これは非同期プロセスなので、それに基づいて要求を保持すべきではありませんが、問題の非同期性で動作します。

+0

ご返信ありがとうございます。たぶん私は十分に問題を説明しなかったでしょう。私はメッセージのTTLを参照していません。 Azure Busは、リクエストとレスポンスを関連付けるために使用されるセッションをサポートします。 1つのキューで要求が行われ、別のキューで応答が提供されます。サンプル[MSDNのサンプル](https://code.msdn.microsoft.com/Brokered-Messaging-Request-0ce8fcaf)です。私はセッションが作成されるときに提供される必要がある実際のtimeourプロパティを参照しています。このタイムアウトに達してプロセッサがメッセージを受け取っていない場合、メッセージの応答は決してピックアップされません。 –

+0

私の間違いは、正しいキューのTTLを使用するデッドレターキューに言及していました。 –

+0

私の答えはあなたの問題を最後に解決しましたか? –

関連する問題