ASP.NET Core 2.0控制台应用监控Azure Service Bus队列深度咨询
在ASP.NET Core 2.0中监控Azure Service Bus队列深度的可行方案
嘿,我之前在ASP.NET Core项目里也碰到过这个问题——旧的NamespaceManager确实是.NET Framework专属的,在跨平台的ASP.NET Core里没法用。给你两个经过验证的可行方案,都是官方支持的跨平台SDK:
方案一:使用Microsoft.Azure.ServiceBus.Management(适配ASP.NET Core 2.0)
这个SDK是专门为跨平台场景设计的,支持.NET Standard 2.0,完美适配ASP.NET Core 2.0。
步骤:
- 安装NuGet包:
dotnet add package Microsoft.Azure.ServiceBus.Management - 编写代码获取队列深度:
using System; using System.Threading.Tasks; using Microsoft.Azure.ServiceBus.Management; class Program { static async Task Main(string[] args) { // 替换成你的Service Bus连接字符串和队列名称 string connectionString = "你的Service Bus连接字符串"; string queueName = "目标队列名称"; var managementClient = new ManagementClient(connectionString); // 获取队列的详细描述 var queueDescription = await managementClient.GetQueueAsync(queueName); // 提取常规队列和死信队列的深度 long regularDepth = queueDescription.MessageCount; long deadLetterDepth = queueDescription.DeadLetterMessageCount; Console.WriteLine($"常规队列当前消息数:{regularDepth}"); Console.WriteLine($"死信队列当前消息数:{deadLetterDepth}"); } }
方案二:使用Azure.Messaging.ServiceBus(适合ASP.NET Core 3.1+)
如果之后你计划升级项目到ASP.NET Core 3.1或更高版本,可以用这个最新的Azure Service Bus SDK,它是Azure SDK统一体系的一部分,API设计更简洁。不过注意它最低支持.NET Standard 2.1,ASP.NET Core 2.0对应的.NET Core 2.0不兼容这个版本,所以如果暂时不能升级项目,优先选方案一。
步骤:
- 安装NuGet包:
dotnet add package Azure.Messaging.ServiceBus - 编写代码获取队列深度:
using System; using System.Threading.Tasks; using Azure.Messaging.ServiceBus.Administration; class Program { static async Task Main(string[] args) { string connectionString = "你的Service Bus连接字符串"; string queueName = "目标队列名称"; var adminClient = new ServiceBusAdministrationClient(connectionString); var queueProperties = await adminClient.GetQueueAsync(queueName); long regularDepth = queueProperties.Value.MessageCount; long deadLetterDepth = queueProperties.Value.DeadLetterMessageCount; Console.WriteLine($"常规队列当前消息数:{regularDepth}"); Console.WriteLine($"死信队列当前消息数:{deadLetterDepth}"); } }
注意事项:
- 确保你的Service Bus连接字符串拥有Manage权限:只有具备管理权限的连接字符串才能调用这些管理API获取队列属性。
- 生产环境建议缓存结果:管理API有调用频率限制,不要每秒都调用,可以设置定时任务(比如每隔1-5分钟)获取一次队列深度。
内容的提问来源于stack exchange,提问作者JeffCren
相关产品推荐
相关产品推荐

