12

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 !

3 Answers 3

4

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

Sign up to request clarification or add additional context in comments.

2 Comments

so no way through celery as is?
@FrederickNord, not that I am aware of. My understanding is that the workers ( Celery ) is only concerned with it's current task, or at most the task it pre-fetched (from RabbitMQ). It's unaware of what is in RabbitMQ and intentionally so.
3

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.

Comments

1

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

Also for RabbitMQ there are some command line command.

3 Comments

thanks for your answer. But I don't need commands, I need python classes or methods. Plus, the inspect method will inspect the workers, not the queues, am I right ?
inspect can not retrieve the length of pending queue as I know. May be inspect reserved, but in my experience it doesn't help too..
Indeed, the official Celery documentation states that you inspect the queues with the rabbitmqctl command line tool. That is pretty inconvenient when RabbitMQ runs on a different machine.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.