我们正在使用amqplib发布/使用消息。我希望能够读取队列中的消息数(理想情况下都是已确认和未确认)。这将允许我向管理员用户显示一个很好的状态图,并检测某个组件是否跟不上负载。
我在amqplib文档中找不到有关读取队列状态的任何信息。
有人能指出我正确的方向吗?
答案 0 :(得分:30)
使用鼠兔:
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'
答案 1 :(得分: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)
您将获得确切的消息编号
答案 2 :(得分:0)
使用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_management。由于它的HTTP API,Rabbitmq_management可能是一个不错的选择。更多信息:http://www.rabbitmq.com/management.html