获取RabbitMQ队列中的消息数量

2024-05-03 05:51:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

有人能告诉我正确的方向吗?


Tags: 用户文档信息消息队列状态管理员情况
3条回答

按照Chillarand的答案,你可以很容易地得到价值。数据在对象中。

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)

你会得到确切的消息号码

使用pika:

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'

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

channel.queueDeclarePassive(queueName).getMessageCount()

我相信amqplib也有这个功能(根据https://code.google.com/p/py-amqplib/source/browse/amqplib/client_0_8/channel.py#1356,似乎queue_declare()返回一个包含消息计数的元组)

如果需要更精确的度量(特别是nack消息计数),则需要使用rabbitmqctl或rabbitmq_管理。Rabbitmq_管理可能是一个不错的选择,因为它有HTTP API。更多信息:http://www.rabbitmq.com/management.html

相关问题 更多 >