当我明确禁用该行为时,为什么Celery + RabbitMQ会自动创建队列?

时间:2013-07-22 19:48:29

标签: rabbitmq celery

首先要做的事情是:我的celeryconfig中有CELERY_CREATE_MISSING_QUEUES = False,我使用celery worker -Q queue1启动了一个芹菜工作者。我可以通过监视看到queue1已创建,并且工作人员正在监听它。现在,当我启动一个路由(通过CELERY_ROUTES)到queue2的任务时,我可以看到创建了queue2;有人可以解释这种行为吗?注意:我认为我所提出的问题与this question不同,因为我看到,理解并可以控制为存储结果而创建的临时队列的生命周期。我想知道的是为什么要创建辅助队列。

1 个答案:

答案 0 :(得分:2)

当工作者引导时,Celery会自动创建使用-Q参数和/或CELERY_QUEUES设置明确指定的队列。

CELERY_CREATE_MISSING_QUEUES设置是指在工作人员引导时未使用这两种机制中的任何一种指定的其他队列。例如,如果您为其中一个任务修饰器指定了一个未列出的队列。

@app.task(queue='some-new-queue'):
def some_task(params):
    pass

当Celery发现some-new-queue不存在时,它会为您创建它,但仅当CELERY_CREATE_MISSING_QUEUES设置为True时才会创建它。否则会出错。