Getting number of messages in a RabbitMQ queue

后端 未结 3 2069
清歌不尽
清歌不尽 2020-12-05 23:59

We\'re using amqplib to publish/consume messages. I want to be able to read the number of messages on a queue (ideally both acknowledged and unacknowledged). This will allow

相关标签:
3条回答
  • 2020-12-06 00:32

    Using 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)
    

    Using PyRabbit:

    from pyrabbit.api import Client
    cl = Client('localhost:55672', 'guest', 'guest')
    cl.get_messages('example_vhost', 'example_queue')[0]['message_count']
    

    Using HTTP

    Syntax:

    curl -i -u user:password http://localhost:15672/api/queues/vhost/queue
    

    Example:

    curl -i -u guest:guest http://localhost:15672/api/queues/%2f/celery           
    

    Note: Default vhost is / which needs to be escaped as %2f

    Using CLI:

    $ sudo rabbitmqctl list_queues | grep 'my_queue'
    
    0 讨论(0)
  • 2020-12-06 00:47

    Using the Java API, you can do the following :

    channel.queueDeclarePassive(queueName).getMessageCount()
    

    I believe this is also available with amqplib (according to https://code.google.com/p/py-amqplib/source/browse/amqplib/client_0_8/channel.py#1356 it seems that queue_declare() returns a tuple with the message count)

    If you need more precise metrics (especially nack message count), you need to use rabbitmqctl or rabbitmq_management. Rabbitmq_management is probably a good choice due to its HTTP API. More info : http://www.rabbitmq.com/management.html

    0 讨论(0)
  • 2020-12-06 00:56

    following the answer of ChillarAnand you can get the value easily. the data is in the object.

    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)
    

    and you will get the exact message number

    0 讨论(0)
提交回复
热议问题