Мое понимание AMQP заключается в том, что сообщения имеют только следующие компоненты:
- Тело сообщения
- Клавиша маршрутизации
- Обмен
Очереди привязаны к биржам. Сообщения не могут знать о очередях. Они просто отправляют на обмен, а затем на основе типа обмена и ключа маршрутизации сообщения направляются в одну или несколько очередей.
В сельдерей рекомендуемый способ маршрутизации задается с помощью настройки CELERY_ROUTES. Из документов CELERY_ROUTES...
Список маршрутизаторов или один маршрутизатор, используемый для маршрутизации задач в очереди. http://celery.readthedocs.org/en/latest/configuration.html#message-routing
И он включает пример...
Чтобы перенаправить задачу в очередь feed_tasks, вы можете добавить запись в CELERY_ROUTES:
CELERY_ROUTES = { 'feeds.tasks.import_feed': { 'queue': 'feed_tasks', 'routing_key': 'feed.import', }, }
Но подождите минуту. Согласно AMQP, сообщения поступают только с ключом маршрутизации! Какая черта - это "очередь" там?
Кроме того, существует такое понятие очереди по умолчанию. Если вы вызываете задачу, которая не попадает на CELERY_ROUTES, она возвращается к CELERY_DEFAULT_QUEUE. Но опять же - в AMQP сообщения не знают о очередях. Разве это не должно быть ключом маршрутизации по умолчанию?