【问题标题】:Celery creates multiple queues on RabbitMQ -- Non-default queues have no consumersCelery 在 RabbitMQ 上创建多个队列——非默认队列没有消费者
【发布时间】:2012-10-08 05:51:02
【问题描述】:

我正在使用带有 RabbitMQ 后端的 Django Celery,所有这些都托管在 Heroku 上。

从 Celery 文档中可以清楚地看出,Celery 旨在为任务创建新队列。我的问题是,当我进入我的 RabbitMQ 控制台时,我看到只有默认队列有任何消费者(celeryd 实例)连接到它。结果是,非默认队列上的所有任务都不会运行。

由于 Celery 文档明确指出 Celery 应该创建许多队列,我觉得我的配置必须在这里遗漏一些非常基本的东西。尽管如此,我不能让我的消费者“跳来跳去”并寻找非空队列——他们只是停留在空的默认队列上。

关于如何解决这个问题的任何想法?

谢谢!

【问题讨论】:

  • 你能发布你的 celery conf 吗?
  • '跳转'并寻找非空队列?它是如何工作的 :) 您必须使用 -Q 命令行选项(或使用 add_consumer 远程控制命令)指定工作人员使用的队列

标签: heroku rabbitmq celery django-celery


【解决方案1】:

我遇到了和你一样的问题,但是深入研究文档,我认为即使队列是自动创建的,你仍然需要明确告诉你的 Celery 工作人员从新创建的开始消费队列。

根据文档,工作人员明确绑定到一个或多个队列。也就是说,如果您在启动 worker 时没有指定 -Q 参数,它将被绑定到“默认”队列,另一方面,如果您为 -Q 参数提供值,那么它将被绑定到您提供的那些特定队列。我理解这意味着您不能将工作人员绑定到“未定义”队列(或稍后将创建的队列)。

来自文档: http://docs.celeryproject.org/en/latest/userguide/workers.html#queues

似乎要让您的工作人员从新创建的队列中开始消费,您可以使用 add_consumer() 方法向他们发送一条消息(在运行时)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2015-12-28
    • 2017-04-13
    相关资源
    最近更新 更多