Я следовал за документами по сельдерею, чтобы определить 2 очереди на моей машине разработчика.
Мои настройки сельдерея:
CELERY_ALWAYS_EAGER = True
CELERY_TASK_RESULT_EXPIRES = 60 # 1 mins
CELERYD_CONCURRENCY = 2
CELERYD_MAX_TASKS_PER_CHILD = 4
CELERYD_PREFETCH_MULTIPLIER = 1
CELERY_CREATE_MISSING_QUEUES = True
CELERY_QUEUES = (
Queue('default', Exchange('default'), routing_key='default'),
Queue('feeds', Exchange('feeds'), routing_key='arena.social.tasks.#'),
)
CELERY_ROUTES = {
'arena.social.tasks.Update': {
'queue': 'fs_feeds',
},
}
я открыл два окна терминала в виртуальном состоянии моего проекта и выполнил следующие команды:
terminal_1$ celery -A arena worker -Q default -B -l debug --purge -n deafult_worker
terminal_2$ celery -A arena worker -Q feeds -B -l debug --purge -n feeds_worker
что я получаю, так это то, что все задачи обрабатываются обеими очередями.
Моя цель - CELERY_ROUTES
одну очередь для обработки только одной задачи, определенной в CELERY_ROUTES
и очередь по умолчанию для обработки всех других задач.
Я также следовал за этим вопросом SO, rabbitmqctl list_queues
возвращает rabbitmqctl list_queues
celery 0
, а выполнение rabbitmqctl list_bindings
возвращает exchange celery queue celery []
rabbitmqctl list_bindings
exchange celery queue celery []
. Перезапуск сервера кролика ничего не изменил.