メッセージ遅延

キューまたはサブスクリプション クライアントが処理が必要なメッセージを受信したものの、特別な状況が原因でただちに処理を実行できない場合、メッセージの取得を後の時点に "遅延" させるオプションを使用できます。 メッセージは、キューまたはサブスクリプションに留まりますが、確保されます。

Note

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

サンプル事例

遅延は、ワークフロー処理のシナリオを対象に作成された機能です。 ワークフロー フレームワークでは、特定の操作を特定の順序で処理することが必要な場合があります。 場合によっては、受信したメッセージの処理を、他のメッセージによって通知される前の所定の作業が完了するまで延期する必要があることがあります。

簡単でわかりやすい例としては、一致する注文書が店舗からフルフィルメント システムに入力される前に、外部の支払いプロバイダーからの支払い通知がシステムに表示される注文処理シーケンスが挙げられます。 このケースでは、関連する注文が届くまで、支払い通知の処理がフルフィルメント システムによって遅延される場合があります。 異なる送信元からのメッセージによってワークフローが進行する集合シナリオでは、リアルタイムの実行順序は正しいのに、結果を反映するメッセージが到着する順序は正しくない場合があります。

つまり遅延は、処理の延期が必要なメッセージをメッセージ ストアに確実に保持しながら、到着した順序から処理できる順序に並べ直すのに役立ちます。

メッセージを処理する特定のリソースが一時的に使用できないためにそのメッセージを処理できない一方で、メッセージの処理をただちに中断できない場合があります。このような場合、数分間そのメッセージを確保する方法は、数分以内に投稿されるスケジュール済みメッセージのシーケンス番号を記憶し、スケジュールされたメッセージが到着したときに遅延メッセージを再取得することです。 メッセージ ハンドラーですべての操作についてデータベースが使用されており、そのデータベースが一時的に使用できない場合、遅延は使用しないでください。その代わり、データベースが再び使用できるようになるまで、メッセージの受信を完全に中断してください。

遅延メッセージの取得

遅延メッセージは、他のすべてのアクティブなメッセージと共にメイン キューに留まります (サブキューに含まれる配達不能メッセージとは異なります)。ただし、通常の受信操作を使用してこれらを受信することはできなくなります。 アプリケーションが遅延メッセージを追跡できなくなった場合、メッセージ参照またはピークを使用して検出できます。

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

次のステップ

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

以前の .NET および Java クライアント ライブラリのサンプルについては、こちらを参照してください。

2026 年 9 月 30 日に、Azure SDK ガイドラインに準拠していない Azure Service Bus SDK ライブラリ WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus、および com.microsoft.azure.servicebus は廃止されます。 SBMP プロトコルのサポートも終了するため、2026 年 9 月 30 日以降はこのプロトコルを使用できなくなります。 この日付より前に、重要なセキュリティ更新プログラムと強化された機能が提供される、最新の Azure SDK ライブラリに移行してください。

古いライブラリは 2026 年 9 月 30 日以降も引き続き使用できますが、Microsoft から公式のサポートと更新プログラムは提供されなくなります。 詳細については、サポート廃止のお知らせに関するページを参照してください。