12

有没有办法获取 Azure 主题订阅的当前消息计数?

我看到 SubscriptionDescription 类有一个 MessageCount 属性,但这个类似乎只用于创建订阅。我看不到为现有订阅检索 SubscriptionDescription 对象的方法。

4

3 回答 3

24

我找到了我要找的东西:

var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
var subscriptionDesc = namespaceManager.GetSubscription(topicPath, subscriptionName);
long messageCount = subscriptionDesc.MessageCount;
于 2012-12-19T18:04:15.083 回答
5

接受的答案适用于将 .NET Framework 库与命名空间Microsoft.ServiceBus.Messagingnuget 包)一起使用时。

对于具有命名空间Microsoft.Azure.ServiceBusnuget 包)的 .NET Standard 库,以下代码可以解决问题:

var managementClient = new ManagementClient(connectionString);
var runTimeInfo = await managementClient.GetSubscriptionRuntimeInfoAsync(topicPath, subscriptionName); 
var messageCount = runTimeInfo.MessageCountDetails.ActiveMessageCount;

有关这两个库之间差异的更多详细信息,请参阅Microsoft.ServiceBus.Messaging 与 Microsoft.Azure.ServiceBus 。

随着.NET Standard 的退役, .NET 5+ 应用程序Azure.Messaging.ServiceBusnuget package)有了一个新的命名空间。对这个包执行相同操作所需的代码是:

var client = new Azure.Messaging.ServiceBus.Administration.ServiceBusAdministrationClient("connetionString");
var runtimeProps = (await client.GetQueueRuntimePropertiesAsync("queueName")).Value;
var messageCount = runtimeProps.ActiveMessageCount;
于 2020-04-20T09:29:22.963 回答
2

Microsoft.Azure.ServiceBus库现已弃用,取而代之的是Azure.Messaging.ServiceBus。所以现在这可以通过 Azure.Messaging.ServiceBus.Administration.ServiceBusAdministrationClient 来实现:

var client = new Azure.Messaging.ServiceBus.Administration.ServiceBusAdministrationClient("connetionString");
var runtimeProps = (await client.GetQueueRuntimePropertiesAsync("queueName")).Value;
var messageCount = runtimeProps.ActiveMessageCount;
于 2021-12-07T12:27:03.577 回答