如何使用Microsoft.Azure.Management.ServiceBus获取队列消息数及队列CRUD示例
Azure Service Bus 队列CRUD及消息统计实现方案
前置依赖
首先安装所需NuGet包:
Microsoft.Azure.Management.ServiceBusAzure.Identity(用于Azure AD认证)
初始化Service Bus管理客户端
所有操作都需要先完成认证,初始化ServiceBusManagementClient实例:
using Azure.Identity; using Microsoft.Azure.Management.ServiceBus; using Microsoft.Azure.Management.ServiceBus.Models; using System.Threading.Tasks; // 替换为实际的Azure订阅ID、资源组名、Service Bus命名空间名 var subscriptionId = "你的订阅ID"; var resourceGroupName = "你的资源组名"; var namespaceName = "你的Service Bus命名空间名"; // 可根据业务场景替换为ClientSecretCredential等其他凭证类型 var credentials = new DefaultAzureCredential(); var token = await credentials.GetTokenAsync(new Azure.Core.TokenRequestContext(new[] { "https://management.azure.com/.default" })); var serviceBusClient = new ServiceBusManagementClient(new Microsoft.Rest.TokenCredentials(token.Token)) { SubscriptionId = subscriptionId };
队列CRUD操作实现
1. 创建队列
var queueName = "test-queue"; var queueParameters = new SBQueue { MaxSizeInMegabytes = 1024, DefaultMessageTimeToLive = TimeSpan.FromDays(7), EnableDeadLetteringOnMessageExpiration = true }; SBQueue createdQueue = await serviceBusClient.Queues.CreateOrUpdateAsync(resourceGroupName, namespaceName, queueName, queueParameters);
CreateOrUpdateAsync方法返回的就是Microsoft.Azure.Management.ServiceBus.SBQueue类型的实例
2. 查询队列(获取SBQueue实例)
直接获取指定队列的SBQueue实例,是统计消息数的前置步骤:
SBQueue queue = await serviceBusClient.Queues.GetAsync(resourceGroupName, namespaceName, queueName);
3. 更新队列
示例为修改队列的消息默认生存时间:
queue.DefaultMessageTimeToLive = TimeSpan.FromDays(14); SBQueue updatedQueue = await serviceBusClient.Queues.CreateOrUpdateAsync(resourceGroupName, namespaceName, queueName, queue);
4. 删除队列
await serviceBusClient.Queues.DeleteAsync(resourceGroupName, namespaceName, queueName);
统计队列消息数量
通过SBQueue实例的CountDetails属性可以直接获取各状态的消息计数:
SBQueue queue = await serviceBusClient.Queues.GetAsync(resourceGroupName, namespaceName, queueName); // 各状态消息单独计数 long activeMessageCount = queue.CountDetails.ActiveMessageCount ?? 0; long deadLetterCount = queue.CountDetails.DeadLetterMessageCount ?? 0; long scheduledMessageCount = queue.CountDetails.ScheduledMessageCount ?? 0; long transferDeadLetterCount = queue.CountDetails.TransferDeadLetterMessageCount ?? 0; long transferMessageCount = queue.CountDetails.TransferMessageCount ?? 0; // 队列总消息数统计 long totalMessageCount = activeMessageCount + deadLetterCount + scheduledMessageCount + transferDeadLetterCount + transferMessageCount;
注意:计数属性为可空类型,建议做非空判断避免空引用异常
内容的提问来源于stack exchange,提问作者Emmanouil Dagdilelis
相关产品推荐
相关产品推荐

