Acks_late: сельдерей + Redis брокер/бэкенд

Я просматривал код сельдерея. Acks_late вызывается, как только функция задачи запускается через (task_trace). Однако в Redis, когда задача получена (т. е. извлекается из очереди Redis), RedisWorkerController создает для нее запрос задачи. Как он снова ставится в очередь в случае смерти рабочего узла?


person vin    schedule 31.01.2018    source источник


Ответы (1)


Сообщения не ставятся в очередь снова, если они не подтверждены (это было бы невозможно, если работник умрет. Они существуют в Redis как неподтвержденные).

Согласно документам celery, у брокера Redis есть механизм тайм-аута видимости.

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

person suligap    schedule 02.08.2018