Мне нужен демон django-celery для прослушивания определенного канала rabbitmq

На самом деле у меня есть несколько приложений django с задачами сельдерея. Мне нужно, чтобы каждая задача выполнялась в определенном канале, чтобы я мог контролировать нагрузку. Например, у меня может быть 3 сервера для прослушивания channel_for_app_1 и два для channel_for_app_2. Мой вопрос: как я могу запустить демон сельдерея и указать канал? Любые другие способы сделать это?


person Andrii Zarubin    schedule 27.11.2013    source источник
comment
вы можете получить больше откликов, если укажете минимальный код, который работает с ...please insert code here, где вы не можете понять, как это сделать?   -  person KobeJohn    schedule 27.11.2013
comment
У меня действительно нет проблем с кодом. Я могу публиковать задачи на определенный канал и даже использовать задачи с TaskConsumer. Но как я могу сделать это с помощью django-celery?   -  person Andrii Zarubin    schedule 27.11.2013


Ответы (2)


Просмотрите эту страницу: http://docs.celeryproject.org/en/latest/userguide/routing.html.

Ваш сельдерей должен начинаться с параметров -Q, --queue, которые определяют, какая очередь будет использоваться для получения задач.

person Rustem    schedule 27.12.2013

В настройках django вы можете указать CELERY_QUEUES:

CELERY_QUEUES = {
"worker": {
    "exchange": "worker",
    "binding_key": "worker" 
},

вот так. Каждый ключ — это имя очереди, и вы можете изменить ключ обмена и привязки, если хотите пофантазировать (множественные обмены и т. д.), но мне это никогда не требовалось.

Определив задачу, вы можете

@task(queue="worker", etc)

Последний шаг — указать имена очередей при запуске celery — либо через конфигурацию демона celery, либо в командной строке при его запуске. Результатом всего этого является то, что задачи сельдерея будут идти в очереди, указанные в определении задачи, и только на ящиках, на которых запущена указанная очередь.

Поэтому я не уверен, имеете ли вы в виду что-то явно другое, когда говорите «каналы», но я всегда использовал несколько очередей для каждой задачи, чтобы делать именно то, что вы описываете.

person Eli Albert    schedule 27.12.2013