Python 获取RabbitMQ队列中的消息数

Python 获取RabbitMQ队列中的消息数,python,rabbitmq,message-queue,py-amqplib,Python,Rabbitmq,Message Queue,Py Amqplib,我们正在使用发布/使用消息。我希望能够读取队列中的消息数(理想情况下是已确认和未确认)。这将允许我向管理员用户显示一个良好的状态图,并检测某个组件是否没有跟上负载 我在amqplib文档中找不到有关读取队列状态的任何信息 有人能给我指出正确的方向吗?使用Java API,您可以执行以下操作: channel.queueDeclarePassive(queueName).getMessageCount() 我相信这在amqplib中也是可用的(根据它看来,queue\u declare()返回一

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

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


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

使用Java API,您可以执行以下操作:

channel.queueDeclarePassive(queueName).getMessageCount()
我相信这在amqplib中也是可用的(根据它看来,
queue\u declare()
返回一个带有消息计数的元组)


如果需要更精确的度量(尤其是nack消息计数),则需要使用rabbitmqctl或rabbitmq_管理。由于其HTTP API,Rabbitmq_管理可能是一个不错的选择。更多信息:

使用鼠兔:

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)
from pyrabbit.api import Client
cl = Client('localhost:55672', 'guest', 'guest')
cl.get_messages('example_vhost', 'example_queue')[0]['message_count']
$ sudo rabbitmqctl list_queues | grep 'my_queue'
使用PyRabbit:

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)
from pyrabbit.api import Client
cl = Client('localhost:55672', 'guest', 'guest')
cl.get_messages('example_vhost', 'example_queue')[0]['message_count']
$ sudo rabbitmqctl list_queues | grep 'my_queue'
使用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:

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)
from pyrabbit.api import Client
cl = Client('localhost:55672', 'guest', 'guest')
cl.get_messages('example_vhost', 'example_queue')[0]['message_count']
$ sudo rabbitmqctl list_queues | grep 'my_queue'

根据Chillar的答案,您可以轻松获得值。数据在对象中

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)

您将得到确切的消息编号

“Q:使用Python如何识别…”-“A:使用Java您可以…”->-1到今天为止,
Python在OPamqplib是一个Python库中没有被提及,问题被标记为Python,但我同意我本可以更清楚,因此为混淆道歉检查此答案谢谢@mike,当我不得不在C#中重新实现其中一些时,这就是我最终要做的。对于Python方法,我最终访问了rabbitmq管理插件并查询了它。无论如何,我很欣赏指针。
PyRabbit
解决方案从队列中检索消息。我想你应该使用
cl.get_queue(“example_vhost”,“example_queue”)['messages']
来代替。你如何获得队列中未确认消息的数量?对于皮卡来说:就把这个放在这里,因为它咬了我,花了我几个小时。重要的是要理解,如果消费者没有预取太多的消息,那么这只是消息的“真实”数量。请参阅以了解
预回迁计数
。为什么一年后才复制Chillar的答案?当我回答时,答案是不同的。查看编辑日志。。。