Определение количества сообщений в очереди служебной шины Azure.

Я знаю, что есть способ определить количество сообщений (или приблизительное количество) в очереди Azure (учетная запись магазина); однако есть ли способ запросить количество ожидающих сообщений в очереди Azure Service Bus?

10 ответов

var nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
long count = nsmgr.GetQueue(queueName).MessageCount;

Правильный ответ по состоянию на 2020+

Использование новых пакетов следующим образом:

      <PackageReference Include="Azure.Messaging.ServiceBus" Version="x.x.x" />

также два пространства имен в одном пакете

      using Azure.Messaging.ServiceBus;
using Azure.Messaging.ServiceBus.Administration;

а затем вы можете использовать новый класс ServiceBusAdministrationClient

      var administrationClient = new ServiceBusAdministrationClient("connectionString");
var props = await administrationClient.GetQueueRuntimePropertiesAsync("queue");
var messageCount = props.Value.ActiveMessageCount;

Это называется MessagesCountDetails.ActiveMessageCount. Возвращает количество активных сообщений в очереди. У вас, вероятно, есть сообщения о мертвых письмах:

var msg = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(Settings.Default.ConnectionString);
numofmessages.Text = msg.GetQueue(QueueName).MessageCountDetails.ActiveMessageCount.ToString();

Вы смотрели на API описания очереди? Там есть свойство под названием MessageCount,

Вот также страница справочной документации по .NET SDK.

Я столкнулся с той же самой проблемой, пытаясь получить счет из очереди мертвых писем. Похоже, что dead letter queue не позволяет вам получить счет напрямую, вы получаете его из MessageCountDetails обычной очереди.

string connectionString = ConfigurationManager.AppSettings["Microsoft.ServiceBus.Connstr"].ToString();
NamespaceManager nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
return nsmgr.GetQueue(QueueName).MessageCountDetails.DeadLetterMessageCount;

Основываясь на том, что у Джозефа был ответ, который я придумал, но для тем и подписок.

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;
        }

В соответствии с рекомендациями Microsoft рекомендуется использовать Microsoft.Azure.ServiceBus, в котором вы можете легко получить количество сообщений,

var managementClient = new ManagementClient("connection string for queue");
var queue = await managementClient.GetQueueRuntimeInfoAsync("queue name");
var messages = queue.MessageCount;

Ниже приведен пример PowerShell для постоянного просмотра длины очереди, используемой в Azure Portal Cloud Shell.

cd "Azure:\<MySubscription>\"
while (1) {(Get-AzureRmServiceBusQueue -ResourceGroup <myRG> -NamespaceName <myNS> -QueueName <myQueueName>).CountDetails | Select -expand ActiveMessageCount}

Я потратил добрых 2 часа на копание в документации, чтобы получить это, и для людей, использующих ядро ​​.net и пакет Nuget Microsoft.Azure.ServiceBus, код выглядит так:

var managementClient = new ManagementClient("queue connection string"));
var runtimeInfo = await managementClient.GetQueueRuntimeInfoAsync("queueName");

var messagesInQueueCount = runtimeInfo.MessageCountDetails.ActiveMessageCount;

По сути, вы получаете информацию обо всех счетчиках (включая мертвые буквы, активные и т. Д.) Из объекта QueueRuntimeInfo вместо старого объекта QueueDescription.

Кроме того, вы можете проверить ожидающие сообщения на портале управления Azure... на панели инструментов для очереди служебной шины... при быстром взгляде... вы можете увидеть длину очереди... это количество текущих / ожидающих сообщений в длину во время загрузки страницы панели инструментов.

Другие вопросы по тегам