确定Azure Service Bus队列中有多少邮件

ace*_*ole 24 azure azure-queues azureservicebus azure-servicebus-queues

我知道有一种方法可以确定Azure队列(存储帐户)中的邮件数量(或近似数量); 但有没有办法查询Azure Service Bus队列中的待处理消息数?

小智 27

var nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
long count = nsmgr.GetQueue(queueName).MessageCount;
Run Code Online (Sandbox Code Playgroud)

  • 使用新的`Microsoft.Azure.ServiceBus`库,这有点不同.你可以在[ManagementUnitTests#GetQueueRuntimeInfoTest()]中看到它是如何完成的(https://github.com/Azure/azure-service-bus-dotnet/blob/master/test/Microsoft.Azure.ServiceBus.UnitTests/Management/ ManagementClientTests.cs#L262). (7认同)

Dan*_*ell 17

截至 2020 年以上的正确答案

新包的使用如下:

<PackageReference Include="Azure.Messaging.ServiceBus" Version="x.x.x" />
Run Code Online (Sandbox Code Playgroud)

同一个包中还有两个命名空间

using Azure.Messaging.ServiceBus;
using Azure.Messaging.ServiceBus.Administration;
Run Code Online (Sandbox Code Playgroud)

然后您可以使用新类 ServiceBusAdministrationClient

var administrationClient = new ServiceBusAdministrationClient("connectionString");
var props = await administrationClient.GetQueueRuntimePropertiesAsync("queue");
var messageCount = props.Value.ActiveMessageCount;
Run Code Online (Sandbox Code Playgroud)

  • 鉴于微软现在建议开发人员使用“Azure.Messaging.ServiceBus”包,而不是**于 2020 年 11 月贬值的旧版“Microsoft.Azure.ServiceBus”包,这个答案现在确实应该被接受。 (4认同)

Kat*_*ris 11

它被称为MessagesCountDetails.ActiveMessageCount.它返回队列中活动消息的数量.你可能有一些死信信息:

var msg = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(Settings.Default.ConnectionString);
numofmessages.Text = msg.GetQueue(QueueName).MessageCountDetails.ActiveMessageCount.ToString();
Run Code Online (Sandbox Code Playgroud)


Dav*_*gon 7

你看过队列描述 API吗?有一个叫做的房产MessageCount.

这里也是.NET SDK参考文档页面.