流覽或查看訊息

訊息流覽或查看可讓 服務匯流排 用戶端列舉佇列或訂用帳戶中的所有訊息,以進行診斷和偵錯。

佇列或訂用帳戶上的查看作業最多會傳回要求的訊息數目。 下表顯示 Peek 作業所傳回的訊息類型。

訊息類型 包括?
作用中訊息 Yes
寄不出的信件訊息 No
鎖定的訊息 Yes
延遲的訊息 Yes
過期的訊息 可能是 (在他們死信之前)
排定的訊息 是的佇列。 訂閱否

寄不出的信件訊息

若要查看 佇列或訂用帳戶的 寄不出的信件訊息,應該在與佇列或訂用帳戶相關聯的寄不出的信件佇列上執行查看作業。 如需詳細資訊,請參閱 存取寄不出的信件佇列

過期的訊息

過期的訊息可能會包含在從 Peek 作業傳回的結果中。 由異步的「垃圾收集」執行清除已取用和過期的訊息。 此步驟不一定會在訊息到期後立即發生。 這就是為什麼,查看作業可能會傳回已經過期的訊息。 下次在佇列或訂用帳戶上叫用接收作業時,這些訊息將會移除或寄不出的信件。 嘗試從佇列復原延遲的訊息時,請記住此行為。

過期的訊息已不再有資格透過任何其他方式定期擷取,即使擷取訊息是由 Peek 傳回也一樣。 傳回這些訊息是設計方式,因為 Peek 是反映記錄目前狀態的診斷工具。

鎖定的訊息

查看也會傳回已 鎖定 且目前正在由其他接收者處理的訊息。 不過,由於 Peek 會傳回已中斷連線的快照集,因此無法在窺視的訊息上觀察到訊息的鎖定狀態。

延遲的訊息

延遲的訊息會和所有其他作用中的訊息一起保留在主要佇列中 (與存留於子佇列中的無效信件訊息不同),但您無法再使用一般的接收作業來接收訊息。 如果應用程式無法追蹤延遲的訊息,則可透過訊息瀏覽來探索它們。

若要擷取延後訊息,其擁有者會負責在延遲時記住 序號 。 任何知道延遲訊息序號的接收者都可以使用將序號視為參數的接收方法接收訊息。 如需序號的詳細資訊,請參閱訊息排序和時間戳記

查看 API

查看適用於佇列、訂用帳戶及其寄不出的信件佇列。

重複呼叫時,查看作業會依序列舉佇列或訂用帳戶中的所有訊息,從最低的可用序號到最高。 這是訊息加入佇列的順序,而不是訊息最終擷取的順序。

您也可以將 SequenceNumber 傳遞至查看作業。 它用來判斷從何處開始窺視。 您可以對查看作業進行後續呼叫,而不需指定參數來進一步列舉。

訊息數目上限

您可以指定您希望查看作業傳回的訊息數目上限。 但是,無法保證批次的大小下限。 傳回的訊息數目取決於幾個因素,其中最具影響力的因素是網路將訊息串流至用戶端的速度。 

以下是使用 Python 服務匯流排 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 服務匯流排的功能。

在這裡尋找舊版 .NET 和 Java 用戶端連結庫的範例:

在 2026 年 9 月 30 日,我們將淘汰不符合 Azure SDK 準則的 Azure 服務匯流排 SDK 程式庫 WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus 和 com.microsoft.azure.servicebus。 我們也將結束 SBMP 通訊協定的支援,因此您將無法在 2026 年 9 月 30 日之後再使用此通訊協定。 請在該日期之前移轉至最新的 Azure SDK 程式庫,該程式庫提供重要的安全性更新和改進的功能。

雖然較舊的程式庫仍可在 2026 年 9 月 30 日之後使用,但這些程式庫將無法繼續收到 Microsoft 的官方支援和更新。 如需詳細資訊,請參閱支援淘汰公告