【问题标题】:Retrieve queue length with Celery (RabbitMQ, Django)使用 Celery (RabbitMQ, Django) 检索队列长度
【发布时间】:2013-07-25 16:15:00
【问题描述】:

我在一个 django 项目中使用 Celery,我的代理是 RabbitMQ,我想检索队列的长度。我浏览了 Celery 的代码,但没有找到执行此操作的工具。我在 stackoverflow (Check RabbitMQ queue size from client) 上发现了这个问题,但我觉得它并不令人满意。

一切都在 celery 中设置好了,所以应该有某种神奇的方法来检索我想要的东西,而无需指定通道/连接。

有人知道这个问题吗?

谢谢!

【问题讨论】:

    标签: django queue rabbitmq celery django-celery


    【解决方案1】:

    这是一个关于如何在 rabbitMQ 中为给定队列读取队列长度的示例:

    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
    

    这是使用pyrabbit 之前由Philip 建议的

    【讨论】:

    • 所以不能按原样通过芹菜吗?
    • @FrederickNord,我不知道。我的理解是工作人员( Celery )只关心它的当前任务,或者至多是它预取的任务(来自 RabbitMQ)。它不知道 RabbitMQ 中有什么,而且是故意的。
    【解决方案2】:

    PyRabbit 可能是您正在寻找的,它是 RabbitMQ 管理接口 API 的 Python 接口。它将允许您查询队列及其当前消息计数。

    【讨论】:

      【解决方案3】:

      您可以使用inspect 模块检查 celery 中的工人。这是guide

      对于RabbitMQ,还有一些command line command

      【讨论】:

      • 感谢您的回答。但我不需要命令,我需要 python 类或方法。另外,inspect 方法将检查工作人员,而不是队列,对吗?
      • inspect 无法据我所知检索待处理队列的长度。可能是inspect reserved,但根据我的经验,它也无济于事..
      • 确实,Celery 官方文档声明您使用 rabbitmqctl 命令行工具检查队列。当 RabbitMQ 在不同的机器上运行时,这非常不方便。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 2012-08-27
      • 2022-01-05
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 2022-10-18
      相关资源
      最近更新 更多