Использование сельдерея в качестве отказоустойчивого планировщика - PullRequest
6 голосов
/ 06 апреля 2011

Я хотел бы использовать сельдерей с rabbitmq в качестве отказоустойчивого планировщика в распределенной среде. Под отказоустойчивостью я подразумеваю, что если задание передается работнику, и этот работник по какой-либо причине выходит из строя, сельдерей должен иметь возможность перенести его на другой сервер. Как можно добиться этого в среде, где есть несколько рабочих узлов?

Ответы [ 2 ]

5 голосов
/ 13 апреля 2011

Вероятно, все, что вам нужно, это просто установить CELERY_ACKS_LATE

Позднее подтверждение означает, что сообщения о задачах будут подтверждены после выполнения задачи, а не только до нее, что является поведением по умолчанию. Таким образом, если рабочий сбой кролика MQ все еще есть сообщение.

Здесь больше информации

Повторить потерянные или не выполненные задачи (сельдерей, Django и RabbitMQ)

2 голосов
/ 06 апреля 2011

Пусть каждый из работников потребляет из одной и той же очереди, и Кролик будет перебирать сообщения для работников (потребителей). Если какой-либо из них завершится неудачно во время обработки задания и до того, как у него появится возможность отправить подтверждение, сообщение будет автоматически помещено обратно в очередь, и следующий работник его заберет. Это шаблон доставки «как минимум один раз».

Эта ссылка с сайта RabbitMQ объясняет схему и включает пример кода Python.

...