浏览或速览消息

通过消息浏览或速览,服务总线客户端可以枚举队列或订阅中的所有消息,以用于诊断和调试。

针对队列或订阅的速览操作最多返回请求数量的消息。 下表显示了速览操作返回的消息类型。

消息类型 是否包括?
活动消息 是
死信消息 否
锁定消息 是
延迟消息 是
过期消息 可能包括(在它们成为死信消息之前)
计划的消息 对于队列,包括。 对于订阅,不包括

死信消息

若要查看队列或订阅的死信消息,应针对与队列或订阅关联的死信队列运行速览操作。 有关详细信息,请参阅访问死信队列。

过期消息

过期消息可能包含在从速览操作返回的结果中。 已使用的消息和过期的消息通过异步“垃圾回收”运行进行清理。 此步骤未必会在消息过期后立即执行。 这就是为何速览操作可能会返回已过期的消息。 下一次对队列或订阅调用接收操作时,这些消息将被删除或设为死信。 请在尝试从队列中恢复延迟的消息时谨记此行为。

过期的消息无法再通过其他任何方式定期检索,即使是 Peek 返回的消息,也不例外。 返回这些消息是设计使然,因为 Peek 是反映日志当前状态的诊断工具。

锁定消息

速览操作还会返回以前已锁定且当前由其他接收程序处理的消息。 但是,因为 Peek 返回的是离线快照,所以无法在速览的消息上观察到消息的锁状态。

延迟消息

延迟的消息连同其他所有活动消息保留在主队列中(与保留在子队列中的死信消息不同),但不再可以使用正则接收操作。 如果应用程序不再能跟踪延迟的消息,可以通过消息浏览来发现这些消息。

若要检索延迟的消息,消息所有者在延迟它时需负责记住序列号。 任何接收方,只要知道延迟消息序列号,之后都可以通过使用将序列号作为参数的接收方法来接收消息。 有关序列号的详细信息,请参阅消息序列化和时间戳。

Peek 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 库 WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus 和 com.microsoft.azure.servicebus,这些库不符合 Azure SDK 准则。 我们还将结束对 SBMP 协议的支持,因此在 2026 年 9 月 30 日之后,你将无法再使用此协议。 请在该日期之前迁移到最新的 Azure SDK 库,新库提供了关键安全更新和改进功能。

尽管旧库在 2026 年 9 月 30 日之后仍可使用,但它们将不再获得 Azure 的官方支持和更新。 有关详细信息,请参阅支持停用公告。