Python 获取RabbitMQ队列中的消息数
我们正在使用发布/使用消息。我希望能够读取队列中的消息数(理想情况下是已确认和未确认)。这将允许我向管理员用户显示一个良好的状态图,并检测某个组件是否没有跟上负载 我在amqplib文档中找不到有关读取队列状态的任何信息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()返回一
有人能给我指出正确的方向吗?使用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的答案?当我回答时,答案是不同的。查看编辑日志。。。