浏览或速览消息
通过消息浏览或速览,服务总线客户端可以枚举队列或订阅中的所有消息,以用于诊断和调试。
针对队列或订阅的速览操作最多返回请求数量的消息。 下表显示了速览操作返回的消息类型。
消息类型 | 是否包括? |
---|---|
活动消息 | 是 |
死信消息 | 否 |
锁定消息 | 是 |
延迟消息 | 是 |
过期消息 | 可能包括(在它们成为死信消息之前) |
计划的消息 | 对于队列,包括。 对于订阅,不包括 |
死信消息
若要查看队列或订阅的死信消息,应针对与队列或订阅关联的死信队列运行速览操作。 有关详细信息,请参阅访问死信队列。
过期消息
过期消息可能包含在从速览操作返回的结果中。 已使用的消息和过期的消息通过异步“垃圾回收”运行进行清理。 此步骤未必会在消息过期后立即执行。 这就是为何速览操作可能会返回已过期的消息。 下一次对队列或订阅调用接收操作时,这些消息将被删除或设为死信。 请在尝试从队列中恢复延迟的消息时谨记此行为。
过期的消息无法再通过其他任何方式定期检索,即使是 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(最新)的 Azure 服务总线客户端库示例 --“发送和接收消息”示例。
- 适用于 Java(最新)的 Azure 服务总线客户端库示例 - “速览消息”示例
- 适用于 Python 的 Azure 服务总线客户端库示例 - “receive_peek.py”示例
- 适用于 JavaScript 的 Azure 服务总线客户端库示例 - “browseMessages.js”示例
- 适用于 TypeScript 的 Azure 服务总线客户端库示例 - “browseMessages.ts”示例
在此处查找早期 .NET 和 Java 客户端库示例:
- 适用于 .NET(旧版)的 Azure 服务总线客户端库示例 - “消息浏览(速览)”示例
- 适用于 Java(旧版)的 Azure 服务总线客户端库示例 - “速览消息”示例。
注意
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 的官方支持和更新。 有关详细信息,请参阅支持停用公告。