Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Retrieve queue length with Celery (RabbitMQ, Django)

I'm using Celery in a django project, my broker is RabbitMQ, and I want to retrieve the length of the queues. I went through the code of Celery but did not find the tool to do that. I found this issue on stackoverflow (Check RabbitMQ queue size from client), but I don't find it satisfying.

Everything is setup in celery, so there should be some kind of magic method to retrieve what I want, without specifying a channel / connection.

Does anyone have any idea about this question ?

Thanks !

like image 692
user2619608 Avatar asked Jul 25 '13 16:07

user2619608


3 Answers

Here is an example on how to read the queue length in rabbitMQ for a given queue:

def get_rabbitmq_queue_length(q):
    from pyrabbit.api import Client
    from pyrabbit.http import HTTPError

    count = 0

    try:
        cl = Client('localhost:15672', 'guest', 'guest')
        if cl.is_alive():
            count = cl.get_queue_depth('/', q)
    except HTTPError as e:
        print "Exception: Could not establish to rabbitmq http api: " + str(e) + " Check for port, proxy, username/pass configuration errors"
        raise

    return count

This is using pyrabbit as previously suggested by Philip

like image 50
Paul in 't Hout Avatar answered Nov 09 '22 06:11

Paul in 't Hout


PyRabbit is probably what you are looking for, it is a Python interface to the RabbitMQ management interface API. It will allow you to query for queues and their current message counts.

like image 3
Philip Cristiano Avatar answered Nov 09 '22 06:11

Philip Cristiano


You can inspect the workers in celery by using inspect module. Here is the guide.

Also for RabbitMQ there are some command line command.

like image 1
Aamir Rind Avatar answered Nov 09 '22 05:11

Aamir Rind