Проверить размер очереди RabbitMQ от клиента

Кто-нибудь знает, есть ли способ проверить количество сообщений в очереди RabbitMQ из клиентского приложения?

Я использую клиентскую библиотеку .NET.

Ответ 1

Фактически вы можете получить это через клиент. При выполнении операции queue_declare RabbitMQ возвращает три кортежа, содержащие (<queue name>, <message count>, <consumer count>). Аргумент passive для queue_declare позволяет проверить, существует ли очередь без изменения состояния сервера. Таким образом, вы можете использовать queue_declare с опцией passive для проверки длины очереди. Не уверен в .NET, но в Python он выглядит примерно так:

name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)

Ответ 2

Если вы хотите сделать это в .Net, проверьте, какая версия используемой вами клиентской библиотеки.

Я использую версию 2.2.0, и мне пришлось использовать BasicGet (queue, noAck).
В этой версии библиотеки QueueDeclare() возвращает только строку, содержащую имя очереди.

BasicGetResult result = channel.BasicGet("QueueName", false);
uint count = result != null ? result.MessageCount : 0;


Я знаю из версии 2.6.1, QueueDeclare() возвращает объект типа QueueDeclareOk.

QueueDeclareOk result = channel.QueueDeclare();
uint count = result.MessageCount;


Кроме того, вы можете вызывать из командной строки:

<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues

И вы увидите следующий вывод:

Листинговые очереди...
QueueName 1
... done.

НТН

Ответ 3

Мне уже 2 года слишком поздно, но я искал его сам и обнаружил, что rabbitmq дает u простой script для связи с erlang node..it в папке sbin, где находится начальный script для RabbitMQ..so вы можете в принципе сказать

./rabbitmqctl list_queues

это отобразит очереди вместе с количеством сообщений, ожидающих до этих очередей аналогичным образом вы также можете сказать

./rabbitmqctl list_channels
./rabbitmqctl list_connections

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

Ответ 4

Обновление: похоже, что реализация pika queue_declare (..) изменилась с момента очень полезного сообщения mmalone.

В python/pika (v0.9.5) все еще можно проверить глубину очереди с помощью pika, но для этого требуется несколько более косвенный подход.

queue_declare (...) передает объект метода в свою функцию обратного вызова, которую вы можете проверить. Например, чтобы проверить количество сообщений и потребителей в очереди с именем 'myQueue':

def cbInspect(qb):
    messagesInQueue = qb.method.message_count
    print "There are %d messages in myQueue" % messagesInQueue

    consumersInQueue = qb.method.consumer_count
    print "There are %d consumers in myQueue" % consumersInQueue

    return

myChannel = channel.queue_declare(callback=cbInspect, queue='myQueue', passive=True)

Надеюсь, что это поможет, и, пожалуйста, успокойся, я новичок здесь: -)

Ответ 5

Я использую версию 3.3.1.Net Client Library.

Я использую следующее, что очень похоже на второе предложение Ralph Willgoss, но вы можете указать имя очереди в качестве аргумента.

QueueDeclareOk result = channel.QueueDeclarePassive(queueName);
uint count = result != null ? result.MessageCount : 0;

Ответ 6

Вы можете использовать метод IModel MessageCount, зарегистрированный здесь

http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.6.4/rabbitmq-dotnet-client-3.6.4-client-htmldoc/html/type-RabbitMQ.Client.IModel.html#method-M:RabbitMQ.Client.IModel.MessageCount(System.String)

edit: Я знаю, что это очень старый пост, но это первый ответ Google, и я надеюсь, что это поможет людям, которые ищут этот ответ в будущем.

Ответ 7

Как минимум, из RabbitMQ 3.3.5 вы можете сделать это в программе на С# без какой-либо клиентской библиотеки RabbitMQ, вызвав HTTP-API управления RabbitMQ:

// The last segment of the URL is the RabbitMQ "virtual host name". 
// The default virtual host name is "/", represented urlEncoded by "%2F".
string queuesUrl = "http://MY_RABBITMQ_SERVER:15672/api/queues/%2F";

WebClient webClient = new WebClient { Credentials = new NetworkCredential("MY_RABBITMQ_USERNAME", "MY_RABBITMQ_PASSWORD") };
string response = webClient.DownloadString(queuesUrl);

Имя пользователя и пароль такие же, как и те, которые вы используете для входа в интерфейс консоли управления RabbitMQ.

Ответ будет представлять собой строку JSON со списком очередей, включая их количество сообщений, среди других свойств. (Если вам нравится, вы можете десериализовать этот JSON в объект С#, используя библиотеку, например Json.NET.)

Документация API установлена ​​вместе с консолью управления RabbitMQ и должна быть доступна на этом сервере в http://MY_RABBITMQ_SERVER:15672/api.

Ответ 8

мой маленький фрагмент, основанный на ответе Мийдрраллса. Я думаю, если бы у него был код в его ответе, я мог бы заметить его намного быстрее.

public uint GetMessageCount(string queueName)
{
    using (IConnection connection = factory.CreateConnection())
    using (IModel channel = connection.CreateModel())
    {
        return channel.MessageCount(queueName);
    }
}