获取RabbitMQ队列中的消息数

Bas*_*sic 18 python message-queue rabbitmq py-amqplib

我们使用amqplib来发布/使用消息.我希望能够读取队列中的消息数(理想情况下都是已确认和未确认).这将允许我向管理员用户显示一个很好的状态图,并检测某个组件是否跟不上负载.

我在amqplib文档中找不到有关读取队列状态的任何信息.

有人能指出我正确的方向吗?

Chi*_*and 33

使用鼠兔:

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)
Run Code Online (Sandbox Code Playgroud)

使用PyRabbit:

from pyrabbit.api import Client
cl = Client('localhost:55672', 'guest', 'guest')
cl.get_messages('example_vhost', 'example_queue')[0]['message_count']
Run Code Online (Sandbox Code Playgroud)

使用HTTP

句法:

curl -i -u user:password http://localhost:15672/api/queues/vhost/queue
Run Code Online (Sandbox Code Playgroud)

例:

curl -i -u guest:guest http://localhost:15672/api/queues/%2f/celery           
Run Code Online (Sandbox Code Playgroud)

注意:默认vhost是/需要转义的%2f

使用CLI:

$ sudo rabbitmqctl list_queues | grep 'my_queue'
Run Code Online (Sandbox Code Playgroud)

  • `PyRabbit`解决方案从队列中检索消息.我想你想要使用`cl.get_queue("example_vhost","example_queue")['messages']`. (3认同)
  • 您如何获得队列中未确认消息的数量? (2认同)

Oha*_*san 6

按照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)
Run Code Online (Sandbox Code Playgroud)

你会得到确切的消息号码