Подтвердить что ты не робот

Взаимодействие с текущей задачей сельдерея

У нас есть распределенная архитектура на основе rabbitMQ и Celery. Мы можем запускать параллельно несколько задач без каких-либо проблем. Масштабируемость хороша.

Теперь нам нужно дистанционно управлять задачей: ПАУЗА, ВОЗОБНОВИТЬ, ОТМЕНА. Единственное решение, которое мы нашли, - сделать в задаче Celery вызовом RPC другой задаче, которая отвечает команде после запроса БД. Задача Celery и задача RPC находятся не на одном компьютере, и только задача RPC имеет доступ к БД.

Есть ли у вас какие-либо советы по его улучшению и легкому взаимодействию с текущей задачей? Спасибо вам

EDIT: На самом деле мы хотели бы сделать что-то вроде на картинке ниже. Легко выполнить конфигурацию Blue или Orange, но мы не знаем, как делать оба одновременно. enter image description here Рабочие подписываются на общий Jobs queue, и каждый рабочий имеет свой Admin queue, объявленный на обмене.

EDIT: ЕСЛИ это невозможно с помощью Celery, я открыт для решения с другими фреймами, например python-rq.

4b9b3361

Ответ 1

Он выглядит как Control Bus pattern.

Для лучшей масштабируемости и для сокращения вызова RPC я рекомендую обратить вспять логику. Команда PAUSE, RESUME, CANCEL нажимает на задачи Сельдерея через шину управления, когда происходит изменение состояния. Приложение Celery сохранит текущее состояние приложения Celery в магазине (может быть в памяти, в файловой системе..). Если состояния задачи должны храниться даже после остановки/запуска приложения, это потребует больше работы, чтобы синхронизировать оба приложения (например, синхронизация при запуске).