我知道有一种方法可以确定Azure队列(商店帐户)中的邮件数量(或近似数量);但有没有办法查询Azure Service Bus 队列中的待处理消息数?
答案 0 :(得分:26)
var nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
long count = nsmgr.GetQueue(queueName).MessageCount;
答案 1 :(得分:11)
它被称为MessagesCountDetails.ActiveMessageCount。 它返回队列中活动消息的编号。你可能有一些死信信息:
var msg = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(Settings.Default.ConnectionString);
numofmessages.Text = msg.GetQueue(QueueName).MessageCountDetails.ActiveMessageCount.ToString();
答案 2 :(得分:7)
你看过Queue Description API了吗?有一个名为MessageCount
的属性。
答案 3 :(得分:1)
我遇到了同样的问题,试图从死信队列中获取计数。看起来deadletterqueue不允许你直接获得一个计数,你可以从正常队列的MessageCountDetails获得它。
string connectionString = ConfigurationManager.AppSettings["Microsoft.ServiceBus.Connstr"].ToString();
NamespaceManager nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
return nsmgr.GetQueue(QueueName).MessageCountDetails.DeadLetterMessageCount;
答案 4 :(得分:0)
这是一个PowerShell示例,用于不断关注Azure Portal Cloud Shell中使用的队列长度
cd "Azure:\<MySubscription>\"
while (1) {(Get-AzureRmServiceBusQueue -ResourceGroup <myRG> -NamespaceName <myNS> -QueueName <myQueueName>).CountDetails | Select -expand ActiveMessageCount}
答案 5 :(得分:0)
基于约瑟夫提出的答案,但仅针对主题和订阅。
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;
}
答案 6 :(得分:0)
我花了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对象获得有关所有计数(包括死信,活动等)的信息。
答案 7 :(得分:0)
根据Microsoft的建议,建议使用Microsoft.Azure.ServiceBus,在其中您可以通过
轻松获取消息计数var managementClient = new ManagementClient("connection string for queue");
var queue = await managementClient.GetQueueRuntimeInfoAsync("queue name");
var messages = queue.MessageCount;
答案 8 :(得分:-3)
另外..您可以在服务总线队列的仪表板上检查Azure管理门户上的待处理消息...快速浏览...您可以看到队列长度...这是当前的数量/仪表板页面加载时的长度/待处理消息。