Search code examples
pythonrabbitmqmessage-queuepy-amqplib

Getting number of messages in a RabbitMQ queue


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 me to show a nice status diagram to the admin users and detect if a certain component is not keeping up with the load.

I can't find any information in the amqplib docs about reading queue status.

Can someone point me in the right direction?


Solution

  • 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'