我正在使用带有RabbitMQ后端的Django Celery,所有这些都在Heroku上托管。
从Celery文档中可以清楚地看出,Celery旨在为任务创建新的队列。我的问题是,当我进入我的RabbitMQ控制台时,我发现只有默认队列有任何消费者(celeryd实例)连接到它。结果是,非默认队列上的所有任务都不会运行。
由于Celery文档明确声明Celery应该创建许多队列,我觉得我必须在配置中遗漏一些非常基本的东西。尽管如此,我无法让我的消费者“跳来跳去”并寻找非空的队列 - 他们只是留在空的默认队列中。
关于如何解决这个问题的任何想法?
谢谢!
答案 0 :(得分:0)
我遇到了和你一样的问题,但是深入研究文档我认为发生的事情就是即使Queue是自动创建的,你仍然需要明确地告诉你的Celery工作人员从新创建的东西开始消费队列。
根据文档,工作人员明确绑定到一个或多个队列。也就是说,如果你在启动worker时没有指定-Q参数,它将被绑定到“default”队列,另一方面如果你为-Q参数提供一个值,那么它将被绑定到您提供的那些特定队列。我理解这意味着您无法将工作器绑定到“未定义”队列(或稍后将创建的队列)。
来自文档: http://docs.celeryproject.org/en/latest/userguide/workers.html#queues
似乎要让你的工作人员从新创建的队列开始消费,你可以使用add_consumer()方法向他们发送消息(在运行时)。