Azure服务总线订阅:如何获取活跃订阅者数量?
获取Azure Service Bus Subscription的活跃订阅者数量
好问题!我之前做Service Bus监控的时候也碰到过这个需求——用旧的NamespaceManager确实拿不到订阅者数量,因为它主要负责实体的元数据管理,碰不到运行时的连接统计。下面给你两种实用的方案:
方法1:用最新的Service Bus管理客户端直接获取(推荐)
现在Azure官方推荐使用Azure.Messaging.ServiceBus SDK,它的管理客户端能直接拿到订阅的运行时连接数。
步骤:
- 先安装对应的NuGet包:
Install-Package Azure.Messaging.ServiceBus - 示例代码:
这里的using Azure.Messaging.ServiceBus.Administration; // 初始化管理客户端 var adminClient = new ServiceBusAdministrationClient("你的Service Bus命名空间连接字符串"); // 获取目标Subscription的运行时属性 var runtimeProps = await adminClient.GetSubscriptionRuntimePropertiesAsync("你的Topic名称", "你的Subscription名称"); // ActiveConnectionsCount就是当前活跃的订阅者连接数 int activeSubscribers = runtimeProps.ActiveConnectionsCount; Console.WriteLine($"当前该订阅的活跃订阅者数量:{activeSubscribers}");ActiveConnectionsCount统计的是当前和该Subscription建立的活跃接收连接数——如果你的每个Worker实例用一个接收客户端,那这个数值就是当前在运行的活跃Worker订阅者数量。
方法2:通过Azure Monitor批量监控(适合长期追踪)
如果需要批量查看多个Subscription的活跃情况,或者做长期的监控告警,Azure Monitor的Metrics是更合适的选择:
- 指标名称:
ActiveConnections - 筛选维度:设置
EntityType为Subscription,EntityName指定你要监控的订阅名称 - 你可以直接在Azure门户的Service Bus资源页→「Metrics」里查看,也可以用Azure Monitor API、PowerShell或CLI来自动化查询数据。
补充提示
- 如果你还在依赖旧的
Microsoft.Azure.ServiceBusSDK(也就是NamespaceManager所在的包),很遗憾它没有提供获取活跃订阅者数量的直接方法,建议尽快升级到最新的SDK,不仅功能更全,性能和稳定性也更好。 - 注意:如果你的Worker实例里创建了多个接收客户端,每个客户端都会被算作一个活跃连接,所以要根据你的Worker实现逻辑来解读这个数值。
内容的提问来源于stack exchange,提问作者user1784014
相关产品推荐
相关产品推荐

