Я просматривал код сельдерея. Acks_late вызывается, как только функция задачи запускается через (task_trace). Однако в Redis, когда задача получена (т. е. извлекается из очереди Redis), RedisWorkerController создает для нее запрос задачи. Как он снова ставится в очередь в случае смерти рабочего узла?
Acks_late: сельдерей + Redis брокер/бэкенд
Ответы (1)
Сообщения не ставятся в очередь снова, если они не подтверждены (это было бы невозможно, если работник умрет. Они существуют в Redis как неподтвержденные).
Согласно документам celery, у брокера Redis есть механизм тайм-аута видимости.
Таким образом, мы можем ожидать, что сообщение будет снова доставлено работнику, если оно не было подтверждено в течение тайм-аута видимости. И вот что происходит. Если во время обработки задачи acks_late отключается питание, задача снова принимается онлайн-воркером по истечении тайм-аута видимости.
person
suligap
schedule
02.08.2018