我正在使用 Django 和 Celery,并且正在尝试设置路由到多个队列。当我指定任务的routing_key
and exchange
(在任务装饰器中或使用apply_async()
)时,该任务不会添加到代理(即 Kombu 连接到我的 MySQL 数据库)。
如果我在任务装饰器中指定队列名称(这意味着路由键被忽略),任务工作正常。这似乎是路由/交换设置的问题。
知道问题可能是什么吗?
这是设置:
设置.py
INSTALLED_APPS = (
...
'kombu.transport.django',
'djcelery',
)
BROKER_BACKEND = 'django'
CELERY_DEFAULT_QUEUE = 'default'
CELERY_DEFAULT_EXCHANGE = "tasks"
CELERY_DEFAULT_EXCHANGE_TYPE = "topic"
CELERY_DEFAULT_ROUTING_KEY = "task.default"
CELERY_QUEUES = {
'default': {
'binding_key':'task.#',
},
'i_tasks': {
'binding_key':'important_task.#',
},
}
任务.py
from celery.task import task
@task(routing_key='important_task.update')
def my_important_task():
try:
...
except Exception as exc:
my_important_task.retry(exc=exc)
启动任务:
from tasks import my_important_task
my_important_task.delay()