分享方式:


瀏覽或查看訊息

訊息瀏覽 (或預覽) 可基於診斷及偵錯目的,讓服務匯流排用戶端能列舉位於佇列或訂用帳戶中的所有訊息。

佇列或訂用帳戶上的瞄核作業最多會傳回要求的訊息數目。 下方資料表顯示瞄核作業所傳回的訊息類型。

訊息類型 已包含?
有效訊息 Yes
無效訊息 No
鎖定的訊息 Yes
延遲的訊息 Yes
過期的訊息 可能會 (在其成為無效字母之前)
排定的訊息 若為佇列則是。 若為訂用帳戶則否

無效訊息

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

過期的訊息

過期的訊息可能包含在「瞄核」作業傳回的結果中。 已取用和過期的訊息會由非同步的「記憶體回收」執行清除。 此步驟不一定會在訊息過期之後立即發生。 這就是為什麼瞄核作業可能會傳回已過期訊息的原因。 下次在佇列或訂用帳戶上叫用接收作業時,將會移除這些訊息,或使之為無效信件。 當您嘗試從佇列復原延遲的訊息時,請務必記住此行為。

過期的訊息不能再以其他任何方式正常擷取,即便是由瞄核傳回時也不例外。 由於瞄核是反映目前記錄狀態的診斷工具,依此依設計傳回這些訊息。

鎖定的訊息

瞄核也能傳回先前曾遭到鎖定但目前為其他接收者正在處理的訊息。 然而,因由於瞄核會傳回已中斷連線的快照集之緣故,訊息的鎖定狀態無法透過瞄核訊息觀察。

延遲的訊息

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

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

預覽 API

瞄核適用於所有佇列、訂用帳戶與各自的無效信件佇列。

當重複呼叫時,瞄核作業會列舉出佇列或訂用帳戶記錄中的所有訊息,並依照順序從最小可用的序號排列到最大序號。 這是訊息加入佇列時的順序,而非訊息最終的擷取順序。

您也可以將 SequenceNumber 傳遞至瞄核作業。 該作業會用來判斷要從何處開始瞄核。 您可以針對瞄核作業進行後續呼叫,而不需指定參數以進一步列舉。

訊息數目上限

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

以下是使用 .NET SDK 瞄核所有訊息的範例程式碼片段。 SequenceNumber​ 可用來追蹤上次瞄核的訊息,並開始在下一則訊息瀏覽。

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 的官方支援和更新。 如需詳細資訊,請參閱支援淘汰公告