次の方法で共有


メッセージを参照またはピークする

Service Bus クライアントは、メッセージを読み取るか、ピークすることにより、診断とデバッグの目的で、キューまたはサブスクリプションのすべてのメッセージを列挙できます。

キューまたはサブスクリプションに対するピーク操作では、多くてもメッセージの要求された数しか返されません。 次の表に、ピーク操作によって返されるメッセージの種類を示します。

メッセージの種類 表示の有無
アクティブなメッセージ はい
配信不能メッセージ いいえ
ロックされたメッセージ はい
遅延メッセージ はい
期限切れのメッセージ 可能性あり (それらが配信不能になる前)
スケジュール設定されたメッセージ キューの場合は、はい。 サブスクリプションの場合、いいえ

配信不能メッセージ

キューまたはサブスクリプションの [配信不能] メッセージをピークするには、そのキューまたはサブスクリプションに関連付けられている配信不能キューでピーク操作を実行する必要があります。 詳細については、配信不能キューへのアクセスに関する記事を参照してください。

期限切れのメッセージ

ピーク操作から返された結果に、期限切れのメッセージが含まれることがあります。 消費され、有効期限の切れたメッセージは、非同期 "ガベージ コレクション" を実行することよって消去されます。 この手順は、メッセージの有効期限が切れた後にただちに実行されるとは限りません。 そのため、ピーク操作により、有効期限が既に切れているメッセージが返される可能性があります。 これらのメッセージは、次回キューまたはサブスクリプションで受信操作が呼び出されたときに削除されるか、または配信不能となります。 キューから遅延メッセージを回復しようとする場合、この動作に留意してください。

期限切れのメッセージは、ピークによって返された場合でも、他の方法では通常の取得ができなくなります。 ピークはログの現在の状態を反映する診断ツールであるため、これらのメッセージが返されるのは設計によるものです。

ロックされたメッセージ

ピークによって、他のレシーバーが現在処理しているロックされたメッセージも返されます。 ただし、ピークでは切断されたスナップショットが返されるため、メッセージのロック状態はピーク メッセージでは確認できません。

遅延メッセージ

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

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

Peek API

ピークは、キュー、サブスクリプション、およびそれらの配信不能キューで動作します。

繰り返し呼び出されると、ピーク操作は、キューまたはサブスクリプション内のすべてのメッセージを、使用可能なシーケンス番号が最小のものから最大の順に列挙します。 これは、メッセージがエンキューされた順序であり、メッセージが最終的に取得される可能性のある順序ではありません。

また、SequenceNumber をピーク操作に渡すこともできます。 これは、ピークの開始位置を特定するために使用します。 このパラメーターを指定せずに、ピーク操作への後続の呼び出しを行い、さらに列挙することができます。

メッセージの最大数

ピーク操作で返されるメッセージの最大数を指定できます。 ただし、バッチの最小サイズを保証する方法はありません。 返されるメッセージの数は、複数の要因によって決まりますが、その中で最も影響が大きいのは、ネットワークがクライアントにメッセージをストリーミングできる速度です。 

Python Service Bus SDK を使ってすべてのメッセージをピークするスニペットの例を次に示します。 sequence_number​ を使って、最後にピークされたメッセージを追跡し、次のメッセージで参照を開始できます。

using Azure.Messaging.ServiceBus;

// Create a Service Bus client for your namespace
ServiceBusClient client = new ServiceBusClient("NAMESPACECONNECTIONSTRING");

// Create Service Bus receiver for your queue in the namespace
ServiceBusReceiver receiver = client.CreateReceiver("QUEUENAME");

// Peek operation with max count set to 5
var peekedMessages = await receiver.PeekMessagesAsync(maxMessages: 5);

// Keep receiving while there are messages in the queue
while (peekedMessages.Count > 0)
{
    int counter = 0; // To get the sequence number of the last peeked message
    int countPeekedMessages = peekedMessages.Count;

    if (countPeekedMessages > 0)
    { 
        // For each peeked message, print the message body
        foreach (ServiceBusReceivedMessage msg in peekedMessages)
        {
            Console.WriteLine(msg.Body);
            counter++;
        }
        Console.WriteLine("Peek round complete");
        Console.WriteLine("");
    }

    // Start receiving from the message after the last one
    var fromSeqNum = peekedMessages[counter-1].SequenceNumber + 1;
    peekedMessages = await receiver.PeekMessagesAsync(maxMessages: 5, fromSequenceNumber: fromSeqNum);
}

次のサンプル出力は、13 個のメッセージが含まれているキューをピークしたものです。

Message 1
Message 2
Message 3
Message 4
Message 5
Peek round complete

Message 6
Message 7
Message 8
Message 9
Message 10
Peek round complete

Message 11
Message 12
Message 13
Peek round complete

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 から公式のサポートと更新プログラムは提供されなくなります。 詳細については、サポート廃止のお知らせに関するページを参照してください。