Ответ 1
Верно ли, что на сельдерее есть немного путаницы, когда вы переходите в Очереди, вам нужно иметь в виду, что параметр очереди относится к объекту Queue Kombu Queue, а не к очереди AMQP, вы можете понять это прочитав этот извлечение из документов. Конечно, тот факт, что сельдерей создает очередь и обменивается с тем же именем, является источником путаницы в использовании параметра очереди. Всегда в документах вы можете прочитать этот абзац:
Если у вас есть другая очередь, но на другой обмен, который вы хотите добавить, просто укажите пользовательский тип обмена и обмена:
CELERY_QUEUES = ( Queue('feed_tasks', routing_key='feed.#'), Queue('regular_tasks', routing_key='task.#'), Queue('image_tasks', exchange=Exchange('mediatasks', type='direct'), routing_key='image.compress'), )
Таким образом, вы можете связать две разные очереди на одном и том же обмене. После маршрутизации задачи, используя только обмен и ключ, вы можете использовать класс Routers
class MyRouter(object):
def route_for_task(self, task, args=None, kwargs=None):
if task == 'myapp.tasks.compress_video':
return {'exchange': 'video',
'exchange_type': 'topic',
'routing_key': 'video.compress'}
return None
Подробнее здесь http://celery.readthedocs.org/en/latest/userguide/routing.html#routers