web-dev-qa-db-ja.com

RabbitMQキュー内のメッセージ数を取得する

amqplib を使用してメッセージをパブリッシュ/コンシュームしています。キューにあるメッセージの数を読み取れるようにしたい(理想的には確認済みと未確認の両方)。これにより、管理者ユーザーにニースステータス図を表示し、特定のコンポーネントが負荷に追いついていないかどうかを検出できます。

Amqplibのドキュメントで、キューのステータスの読み取りに関する情報が見つかりません。

誰かが私を正しい方向に向けることができますか?

19
Basic

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           

注:デフォルトの仮想ホストは/エスケープする必要がある%2f

CLIの使用:

$ Sudo rabbitmqctl list_queues | grep 'my_queue'
32
ChillarAnand

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)

正確なメッセージ番号を取得します

6
OhadBasan

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

0
mguillermin