我有
CELERY_CREATE_MISSING_QUEUES = True
CELERY_QUEUES
CELERY_DEFAULT_QUEUE = 'default'
(直接类型)我看到自定义路由器返回的路由中的新队列已创建,我认为这是因为CELERY_CREATE_MISSING_QUEUES
。
现在,在我运行的工作节点中,我没有通过-Q
参数,它仅使用'默认值'队列似乎与文档一致 -
默认情况下,它将使用中定义的所有队列 CELERY_QUEUES设置(如果未指定,则默认为队列 命名芹菜)。
有没有办法让我的worker节点从包括动态创建的所有队列中消耗?
谢谢,
答案 0 :(得分:5)
工作人员需要被告知这些自动或动态创建的队列,因此您需要一种方法来获取这些队列名称并在创建它们时存储它们,或者如果您正在使用它们可能来自rabbitmqctl list_queues
RabbitMQ作为代理,例如添加一个信号处理程序,将这些动态队列添加到工作人员中以供消费。
例如使用celeryd_after_setup
信号:
from celery.signals import celeryd_after_setup
@celeryd_after_setup.connect
def add_dynamic_queue(sender, instance, **kwargs):
# get the dynamic queue, maybe stored somewhere
queue = 'dynamic_queue'
instance.app.amqp.queues.select_add(queue)
如果始终创建新的动态队列,您还可以命令工作人员在运行时使用以下命令开始使用这些队列:
#command all workers to consume from the 'dynamic_queue' queue
app.control.add_consumer('dynamic_queue', reply=True)
# command specific workers
app.control.add_consumer('dynamic_queue', reply=True, destination=[w1@example])
请参阅Adding Consumers。
我希望这会有所帮助,当我获得有关此内容的更多信息时,我会编辑问题。