确定Azure Service Bus队列中有多少邮件

时间:2013-04-27 17:23:49

标签: azure azureservicebus azure-queues azure-servicebus-queues

我知道有一种方法可以确定Azure队列(商店帐户)中的邮件数量(或近似数量);但有没有办法查询Azure Service Bus 队列中的待处理消息数?

9 个答案:

答案 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的属性。

这也是.NET SDK reference documentation page

答案 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管理门户上的待处理消息...快速浏览...您可以看到队列长度...这是当前的数量/仪表板页面加载时的长度/待处理消息。