你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

获取消息计数器

本文介绍为队列或订阅获取消息计数的不同方式。 对于确定队列是否累积了需要的处理资源比当前部署资源更多的积压工作,了解活动消息计数会十分有用。

计数器 说明
ActiveMessageCount 队列或订阅中处于活动状态且已准备发送的消息数。 这包括延迟的消息。
ScheduledMessageCount 计划状态中的消息数。
DeadLetterMessageCount 死信队列中的信息数。
TransferMessageCount 等待传输到其他队列或主题的消息数。
TransferDeadLetterMessageCount 未能传输到其他队列或主题且已移动到传输死信队列中的消息数。

如果应用程序要基于队列长度缩放资源,则应按照慎重的进度执行此操作。 获取消息计数器是消息代理中成本高昂的操作,频繁执行它会直接对实体性能产生负面影响。

考虑是否缩放的另一个有用指标是发送最新邮件与处理该邮件之间的时间,也称为“关键时间”。 这在以下情况下非常有用:队列中可能有数千封邮件,但处理速度足够快,可以跟上,“关键时间”只有几秒钟,这对于电子邮件发送终结点等资源来说可能已经足够了。 第三方库(如 NServiceBus)通过 OpenTelemetry 发出此指标和其他有用指标。

注意

发送到服务总线主题的消息将转发到该主题的订阅。 因此,主题本身的活动消息计数为 0,因为这些消息已成功转发到订阅。 获取订阅处的消息计数,并验证它是否大于 0。 即使你在订阅中看到消息,但它们实际上存储在主题所拥有的存储中。 如果查看这些订阅,则它们的消息计数不会为零,这会增加该主题的存储使用量。

使用 Azure 门户

导航到你的命名空间,然后选择队列。 在队列的“概述”页面上,可以看到消息计数器。

显示队列的“概述”页的屏幕截图,其中突出显示了“消息计数”部分。

导航到你的命名空间,选择主题,然后选择该主题的订阅。 在队列的“概述”页面上,可以看到消息计数器。

显示主题的订阅的“概述”页的屏幕截图,其中突出显示了“消息计数”部分。

使用 Azure CLI

使用 az servicebus queue show 命令获取队列的消息计数详细信息,如下方示例中所示。

az servicebus queue show --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name myqueue \
    --query countDetails

下面是示例输出:

ActiveMessageCount    DeadLetterMessageCount    ScheduledMessageCount    TransferMessageCount    TransferDeadLetterMessageCount
--------------------  ------------------------  -----------------------  ----------------------  --------------------------------
0                     0                         0                        0                       0

使用 az servicebus topic subscription show 命令获取订阅的消息计数详细信息,如下方示例中所示。

az servicebus topic subscription show --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --topic-name mytopic \
    --name mysub \
    --query countDetails

使用 Azure PowerShell

使用 PowerShell,可以获取队列的消息计数详细信息,如下所示:

$queueObj=Get-AzServiceBusQueue -ResourceGroup myresourcegroup `
                    -NamespaceName mynamespace `
                    -QueueName myqueue 

$queueObj.CountDetails

下面是示例输出:

ActiveMessageCount             : 7
DeadLetterMessageCount         : 1
ScheduledMessageCount          : 3
TransferMessageCount           : 0
TransferDeadLetterMessageCount : 0

可以获取订阅的消息计数详细信息,如下所示:

$topicObj= Get-AzServiceBusSubscription -ResourceGroup myresourcegroup `
                -NamespaceName mynamespace `
                -TopicName mytopic `
                -SubscriptionName mysub

$topicObj.CountDetails

返回的 MessageCountDetails 对象具有以下属性:ActiveMessageCountDeadLetterMessageCountScheduledMessageCountTransferDeadLetterMessageCountTransferMessageCount

后续步骤

尝试采用所选语言的示例,了解 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 日之后仍然可以使用较旧的库,但它们将不再获得 Microsoft 的官方支持和更新。 有关详细信息,请参阅支持停用公告