Работник не потребляет задачи после того, как сельдерей вызывается add_consumer

Я бы хотел использовать Celery (с RabbitMQ как backend MQ) для выполнения задач различного вкуса через разные очереди. Одно из требований заключается в том, что потребление (рабочими) из конкретной очереди должно иметь возможность приостанавливаться и возобновляться.

Сельдерей, похоже, эту возможность посредством вызова add_consumer и cancel_consumer. Хотя мне удалось отменить потребление задач из очереди для конкретного работника, я не могу заставить работника возобновить потребление, вызвав add_consumer. Код для воспроизведения этой проблемы приведен ниже. Мое предположение, вероятно, я пропускаю какой-то параметр, который должен быть предоставлен либо в celeryconfig, либо через аргументы при запуске рабочих?

Было бы здорово получить несколько свежих пар глаз. В Stackoverflow не так много обсуждений относительно add_consumer и Github. Поэтому я надеюсь, что некоторые эксперты готовы поделиться своими мыслями/опытом.

-

Я запускаю следующее:

ОС Windows, RabbitMQ 3.5.6, Erlang 18.1, Python 3.3.5, сельдерей 3.1.15

Ответ 1

Чтобы вернуться из очереди, вам нужно указать имя очереди, а также целевых работников. Вот как это сделать.

app.control.add_consumer(queue='high', destination=['[email protected]'])

Вот подпись add_consumer

def add_consumer(state, queue, exchange=None, exchange_type=None,
             routing_key=None, **options):

В вашем случае вы вызываете

app.control.add_consumer('high', destination=['[email protected]'])

Итак, high переходит в состояние, а очередь пуста. Таким образом, он не может возобновить работу.