Get Queue Size in Pika (AMQP Python) Get Queue Size in Pika (AMQP Python) python python

Get Queue Size in Pika (AMQP Python)


I know that this question is a bit old, but here is an example of doing this with pika.

Regarding AMQP and RabbitMQ, if you have already declared the queue, you can re-declare the queue with the passive flag on and keeping all other queue parameters identical. The response to this declaration declare-ok will include the number of messages in the queue.

Here is an example With pika 0.9.5:

import pikadef on_callback(msg):    print msgparams = pika.ConnectionParameters(        host='localhost',        port=5672,        credentials=pika.credentials.PlainCredentials('guest', 'guest'),    )# Open a connection to RabbitMQ on localhost using all default parametersconnection = pika.BlockingConnection(parameters=params)# Open the channelchannel = connection.channel()# Declare the queuechannel.queue_declare(        callback=on_callback,        queue="test",        durable=True,        exclusive=False,        auto_delete=False    )# ...# Re-declare the queue with passive flagres = channel.queue_declare(        callback=on_callback,        queue="test",        durable=True,        exclusive=False,        auto_delete=False,        passive=True    )print 'Messages in queue %d' % res.method.message_count

This will print the following:

<Method(['frame_type=1', 'channel_number=1', "method=<Queue.DeclareOk(['queue=test', 'message_count=0', 'consumer_count=0'])>"])><Method(['frame_type=1', 'channel_number=1', "method=<Queue.DeclareOk(['queue=test', 'message_count=0', 'consumer_count=0'])>"])>Messages in queue 0

You get the number of messages from the message_count member.


Here is how you can get queue length using pika(Considering you are using default user and password on localhost)replace q_name by your queue name.

import pikaconnection = pika.BlockingConnection()channel = connection.channel()q = channel.queue_declare(q_name)q_len = q.method.message_count


Have you tried PyRabbit? It has a get_queue_depth() method which sounds like what you're looking for.