29

我知道有一种方法可以确定 Azure 队列(存储帐户)中的消息数量(或近似数量);但是有没有办法查询 Azure服务总线队列上的待处理消息的数量?

4

9 回答 9

32
var nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
long count = nsmgr.GetQueue(queueName).MessageCount;
于 2014-02-15T23:11:48.753 回答
12

它称为 MessagesCountDetails.ActiveMessageCount。它返回队列中活动消息的数量。你可能有一些死信消息:

var msg = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(Settings.Default.ConnectionString);
numofmessages.Text = msg.GetQueue(QueueName).MessageCountDetails.ActiveMessageCount.ToString();
于 2015-01-29T16:07:32.720 回答
7

你看过队列描述API 吗?有一个属性叫MessageCount.

这里也是.NET SDK 参考文档页面

于 2013-04-27T18:20:06.760 回答
1

根据约瑟夫的答案,我想出了一个答案,但主题和订阅。

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;
        }
于 2020-02-13T14:32:42.420 回答
0

这是一个 PowerShell 示例,用于持续关注 Azure Portal Cloud Shell 中使用的队列长度

cd "Azure:\<MySubscription>\"
while (1) {(Get-AzureRmServiceBusQueue -ResourceGroup <myRG> -NamespaceName <myNS> -QueueName <myQueueName>).CountDetails | Select -expand ActiveMessageCount}
于 2018-10-09T11:25:00.783 回答
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 对象获取有关所有计数(包括死信、活动等)的信息。

于 2020-03-02T11:46:17.853 回答
0

我在尝试从死信队列中获取计数时遇到了同样的问题。看起来死信队列不允许您直接获取计数,您可以从普通队列的 MessageCountDetails 获取它。

string connectionString = ConfigurationManager.AppSettings["Microsoft.ServiceBus.Connstr"].ToString();
NamespaceManager nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
return nsmgr.GetQueue(QueueName).MessageCountDetails.DeadLetterMessageCount;
于 2017-04-02T16:03:46.067 回答
0

根据 Microsoft 的建议,建议使用 Microsoft.Azure.ServiceBus,您可以在其中轻松获取消息计数

var managementClient = new ManagementClient("connection string for queue");
var queue = await managementClient.GetQueueRuntimeInfoAsync("queue name");
var messages = queue.MessageCount;
于 2020-05-06T07:26:26.943 回答
-3

此外..您可以在 Azure 管理门户上检查待处理消息...在服务总线队列的仪表板上...快速浏览下...您可以看到队列长度...这是当前/待处理消息的数量仪表板页面加载时的长度。

于 2013-04-28T05:37:05.217 回答