Проверьте размер очереди RabbitMQ от клиента
8 ответов
вы действительно можете получить это через клиент. Когда выполните queue_declare
операция RabbitMQ возвращает три кортежа, содержащих (<queue name>, <message count>, <consumer count>)
. The passive
аргумент queue_declare позволяет проверить, существует ли очередь без изменения состояния сервера. Таким образом, вы можете использовать queue_declare
С passive
возможность проверить длину очереди. Не уверен в .NET, но в Python это выглядит примерно так:
name, jobs, consumers = chan.queue_declare(queue=queuename, passive=True)
Я опоздал на 2 года, но я сам искал его и обнаружил, что rabbitmq дает простой скрипт для связи с узлами erlang..его в папке sbin, где находится начальный скрипт для RabbitMQ..так что вы можете в основном сказать
./rabbitmqctl list_queues
это отобразит очереди вместе с количеством сообщений, ожидающих этих очередей точно так же вы можете сказать
./rabbitmqctl list_channels
./rabbitmqctl list_connections
etc. Для получения дополнительной информации вы можете посетить здесь
Если вы хотите сделать это в .Net, проверьте, какую версию клиентской библиотеки вы используете.
Я использую 2.2.0 версия, и мне пришлось использовать BasicGet (queue, noAck).
В этой версии библиотеки QueueDeclare () возвращает только строку, содержащую имя очереди.
BasicGetResult result = channel.BasicGet("QueueName", false);
uint count = result != null ? result.MessageCount : 0;
Я знаю из 2.6.1 version, QueueDeclare () возвращает объект типа QueueDeclareOk.
QueueDeclareOk result = channel.QueueDeclare();
uint count = result.MessageCount;
Кроме того, вы можете позвонить из командной строки:
<InstallPathToRabbitMq>\sbin\rabbitmqctl.bat list_queues
и вы видите следующий вывод:
список очередей...
Имя_очереди 1
...сделанный.
HTH
Я использую версию 3.3.1 клиентской библиотеки .Net.
Я использую следующее, что очень похоже на второе предложение Ральфа Уиллгосса, но вы можете указать имя очереди в качестве аргумента.
QueueDeclareOk result = channel.QueueDeclarePassive(queueName);
uint count = result != null ? result.MessageCount : 0;
Update: похоже, что реализация 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)
надеюсь, это поможет, и, пожалуйста, полегче со мной, я новичок здесь: -)
мой маленький фрагмент, основанный на ответе Myydrralls. Думаю, если бы в его ответе был код, я бы заметил это гораздо быстрее.
public uint GetMessageCount(string queueName)
{
using (IConnection connection = factory.CreateConnection())
using (IModel channel = connection.CreateModel())
{
return channel.MessageCount(queueName);
}
}
вы можете использовать метод MessageCount IModel, задокументированный здесь
edit: я знаю, что это очень старый пост, но это первый ответ google, и я надеюсь, что это поможет людям, которые ищут этот ответ в будущем.
по крайней мере, как RabbitMQ 3.3.5, вы можете сделать это в программе C# без какой-либо клиентской библиотеки RabbitMQ, вызвав RabbitMQ Management HTTP API:
// 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.
Response будет строкой JSON со списком очередей, включая их количество сообщений, среди других свойств. (Если хотите, вы можете десериализовать этот JSON в объект C#, используя такую библиотеку, как Json.NET.)
документация по API устанавливается вместе с консолью управления RabbitMQ и должна быть доступна на этом сервере по адресу http://MY_RABBITMQ_SERVER:15672/api .