Получение количества сообщений в очереди RabbitMQ
Мы используем amqplib для публикации / использования сообщений. Я хочу иметь возможность прочитать количество сообщений в очереди (в идеале как подтвержденные, так и неподтвержденные). Это позволит мне показать симпатичную диаграмму состояния пользователям с правами администратора и определить, не соответствует ли определенный компонент нагрузке.
Я не могу найти никакой информации в документации amqplib о состоянии чтения очереди.
Может ли кто-нибудь указать мне правильное направление?
3 ответа
Использование Пика:
import pika
pika_conn_params = pika.ConnectionParameters(
host='localhost', port=5672,
credentials=pika.credentials.PlainCredentials('guest', 'guest'),
)
connection = pika.BlockingConnection(pika_conn_params)
channel = connection.channel()
queue = channel.queue_declare(
queue="your_queue", durable=True,
exclusive=False, auto_delete=False
)
print(queue.method.message_count)
Использование PyRabbit:
from pyrabbit.api import Client
cl = Client('localhost:55672', 'guest', 'guest')
cl.get_messages('example_vhost', 'example_queue')[0]['message_count']
Используя HTTP
Синтаксис:
curl -i -u user:password http://localhost:15672/api/queues/vhost/queue
Пример:
curl -i -u guest:guest http://localhost:15672/api/queues/%2f/celery
Примечание: vhost по умолчанию /
который должен быть экранирован как %2f
Используя CLI:
$ sudo rabbitmqctl list_queues | grep 'my_queue'
Следуя ответу ChillarAnand, вы можете легко получить значение. данные находятся в объекте.
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost',
port=5672,
credentials=pika.credentials.PlainCredentials('guest', 'guest'),
)
channel = connection.channel()
print(channel.queue_declare(queue="your_queue", durable=True, exclusive=False,
auto_delete=False).method.message_count)
и вы получите точный номер сообщения
Используя Java API, вы можете сделать следующее:
channel.queueDeclarePassive(queueName).getMessageCount()
Я полагаю, что это также доступно с amqplib (согласно https://code.google.com/p/py-amqplib/source/browse/amqplib/client_0_8/channel.py кажется, что queue_declare()
возвращает кортеж с количеством сообщений)
Если вам нужны более точные метрики (особенно количество сообщений nack), вам нужно использовать rabbitmqctl или rabbitmq_management. Rabbitmq_management, вероятно, является хорошим выбором из-за его HTTP API. Дополнительная информация: http://www.rabbitmq.com/management.html