Compartir a través de

浏览或速览消息

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

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

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

死信消息

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

过期消息

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

过期的消息无法再通过其他任何方式定期检索,即使是 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 的官方支持和更新。 有关详细信息,请参阅支持停用公告