我知道有一种方法可以确定 Azure 队列(存储帐户)中的消息数量(或近似数量);但是有没有办法查询 Azure服务总线队列上的待处理消息的数量?
9 回答
var nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
long count = nsmgr.GetQueue(queueName).MessageCount;
它称为 MessagesCountDetails.ActiveMessageCount。它返回队列中活动消息的数量。你可能有一些死信消息:
var msg = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(Settings.Default.ConnectionString);
numofmessages.Text = msg.GetQueue(QueueName).MessageCountDetails.ActiveMessageCount.ToString();
你看过队列描述API 吗?有一个属性叫MessageCount
.
这里也是.NET SDK 参考文档页面。
根据约瑟夫的答案,我想出了一个答案,但主题和订阅。
public async Task<long> GetCounterMessages()
{
var client = new ManagementClient(ServiceBusConnectionString);
var subs = await client.GetSubscriptionRuntimeInfoAsync(TopicName, SubscriptionName);
var countForThisSubscription = subs.MessageCount; //// (Comes back as a Long.)
return countForThisSubscription;
}
这是一个 PowerShell 示例,用于持续关注 Azure Portal Cloud Shell 中使用的队列长度
cd "Azure:\<MySubscription>\"
while (1) {(Get-AzureRmServiceBusQueue -ResourceGroup <myRG> -NamespaceName <myNS> -QueueName <myQueueName>).CountDetails | Select -expand ActiveMessageCount}
我花了 2 个小时深入研究文档来获得它,对于使用 .net core 和 Microsoft.Azure.ServiceBus nuget 包的人来说,代码如下所示:
var managementClient = new ManagementClient("queue connection string"));
var runtimeInfo = await managementClient.GetQueueRuntimeInfoAsync("queueName");
var messagesInQueueCount = runtimeInfo.MessageCountDetails.ActiveMessageCount;
显然,您从 QueueRuntimeInfo 对象而不是旧的 QueueDescription 对象获取有关所有计数(包括死信、活动等)的信息。
我在尝试从死信队列中获取计数时遇到了同样的问题。看起来死信队列不允许您直接获取计数,您可以从普通队列的 MessageCountDetails 获取它。
string connectionString = ConfigurationManager.AppSettings["Microsoft.ServiceBus.Connstr"].ToString();
NamespaceManager nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
return nsmgr.GetQueue(QueueName).MessageCountDetails.DeadLetterMessageCount;
根据 Microsoft 的建议,建议使用 Microsoft.Azure.ServiceBus,您可以在其中轻松获取消息计数
var managementClient = new ManagementClient("connection string for queue");
var queue = await managementClient.GetQueueRuntimeInfoAsync("queue name");
var messages = queue.MessageCount;
此外..您可以在 Azure 管理门户上检查待处理消息...在服务总线队列的仪表板上...快速浏览下...您可以看到队列长度...这是当前/待处理消息的数量仪表板页面加载时的长度。