Azure Service Busでのメッセージ遅延

キューまたはサブスクリプション のクライアントが、処理するメッセージを受け取ったが、特殊な状況のため現在処理できない場合、クライアントはメッセージの取得を後で延期できます。 メッセージは、キューまたはサブスクリプションに留まりますが、確保されます。

メッセージ遅延を使用する場合

遅延は、ワークフロー処理シナリオ専用に作成された機能です。 ワークフロー フレームワークでは、特定の操作を特定の順序で処理する必要がある場合があります。 一部の受信メッセージの処理は、他のメッセージから事前に通知された所定の作業が完了するまで延期しなければならない場合があります。

簡単な例として、一致する発注書がネットショップからフルフィルメント システムに伝達される前に、外部の支払プロバイダーからの支払通知がシステムに表示される注文処理シーケンスがあります。 その場合、フルフィルメント システムは、関連付ける注文が発生するまで、支払通知の処理を延期する場合があります。 異なるソースからのメッセージがワークフローを前に進めるランデブーシナリオでは、リアルタイムでの実行順序は正しい場合でも、結果を反映したメッセージが順不同で到着する可能性があります。

遅延は、処理を延期する必要があるときにメッセージ ストアにメッセージを安全に残しながら、到着注文から処理可能な順序にメッセージを並べ替えるのに役立ちます。

メッセージを処理するための特定のリソースが一時的に使用できないが、メッセージ処理を中断してはならないため、メッセージを処理できない場合は、そのメッセージを数分間脇に置くことができます。 数分後にポストされる スケジュールされたメッセージ のシーケンス番号を思い出し、スケジュールされたメッセージが到着したときに遅延メッセージを再取得します。 メッセージ ハンドラーがすべての操作でデータベースに依存していて、そのデータベースが一時的に使用できない場合は、遅延を使用しないでください。 代わりに、データベースが再び使用可能になるまで、メッセージの受信を一時停止します。

遅延メッセージを取得する

遅延メッセージは、(サブキューに存在する配信不能メッセージとは異なり) 他のすべてのアクティブ メッセージと共にメイン キューに残りますが、通常の受信操作を使用して受信できなくなります。 遅延メッセージは、アプリケーションがそれらを見失った場合でも、メッセージの参照またはピークによって見つけることができます。

遅延メッセージを取得するには、メッセージの遅延時に シーケンス番号 を記憶する必要があります。 遅延メッセージのシーケンス番号を認識する受信者は、後でシーケンス番号をパラメーターとして受け取る受信メソッドを使用してメッセージを受信できます。 シーケンス番号の詳細については、「メッセージの シーケンス処理とタイムスタンプ」を参照してください。

遅延メッセージは期限切れになりません。また、クライアント アプリが API とシーケンス番号を使用して受信を試みるまで、配信不能キューに自動的に移動します。 この動作は設計によるものです。 クライアントが遅延メッセージを取得しようとすると、 期限切れの状態 がチェックされ、既に期限切れになっている場合は配信不能キューに移動されます。 期限切れになったメッセージは、エンティティ(キューまたはサブスクリプション)に対してデッドレター機能が有効になっている場合にのみ、デッドレター サブキューに移動します。

遅延メッセージの主な動作

  • 遅延メッセージは、サブキューではなくメイン キューに残ります。
  • 遅延メッセージを取得するには、メッセージの シーケンス番号 を使用する必要があります。
  • 延期メッセージは、メッセージの参照(peek)を使用して確認できます。
  • 遅延メッセージは、クライアントが受信を試みるまで期限切れになりません。
  • 有効期限チェックは、クライアントがシーケンス番号を使用して受信 API を呼び出す場合にのみ発生します。

次のステップ

Azure Service Bus の機能については、使用する言語のサンプルを試してみてください。