消息的.NET核心天青servicebusqueue数

问题描述 投票:3回答:2

我目前的工作,我使用Microsoft.Azure.Servicebus 1.0版NuGet包这里基金净核心项目:https://github.com/Azure/azure-service-bus

我的问题是,我找不到任何方法来获得活动消息的队列数。这曾经是与使用ServicebusNamespace.NamespaceManager Net框架很容易的,指的是队列和使用.ActiveMessageCount

有谁知道这是否可能以其他方式在这个库的.Net核心1.1吗?

asp.net-core .net-core azureservicebus azure-servicebus-queues
2个回答
5
投票

在.NET Standard客户端(Microsoft.Azure.ServiceBus)是故意不提供管理操作。它指出,管理操作不应该在运行时进行。管理操作是非常缓慢的。

有谁知道这是否可能以其他方式在这个库的.Net核心1.1吗?

对的,这是可能的。相反,这是可用的旧的客户端(NamespaceManager)的WindowsAzure.ServiceBus的,有一个ServiceBus管理库(Microsoft.Azure.Management.ServiceBus.Fluent

你需要做到以下几点:

  • 验证使用ServiceBusManager
  • 访问命名空间,你有兴趣通过ServiceBusManager.Namespaces
  • 过滤掉你的下ServiceBusManager.Namespaces.Queues / ServiceBusManager.Namespaces.Topics它定位感兴趣的实体。对于订阅,您需要通过ITopic对象进行查找。
  • 一旦你得到了你的实体(IQueueITopic,或ISubscription),你就可以访问消息计数。

我不是这种方法的大风扇。不是每个开发者重新发明轮子此,Azure的服务总线团队应该提供一个辅助库替换NamespaceManger。您可以随时raise an issue或投票给was closed的问题。

更新

管理操作在版本3.1.1 PR #481引回。


5
投票

它采用了最新版本的服务总线库现在是可能的(3.1.1)https://www.nuget.org/packages/Microsoft.Azure.ServiceBus/

using Microsoft.Azure.ServiceBus;
using Microsoft.Azure.ServiceBus.Management;

var client = new ManagementClient(connectionString);
var queue = await client.GetQueueRuntimeInfoAsync(queuePath);
var counts = queue.MessageCountDetails;

var subs = await client.GetSubscriptionRuntimeInfoAsync(topic, subscription);
var countForThisSubscription = subs.MessageCount;  //// (Comes back as a Long.)

编辑:添加的代码示例

编辑2:添加了主题和订阅使用的代码示例。

© www.soinside.com 2019 - 2024. All rights reserved.