2017-01-10 3 views
0

작업자가 실행중인 서버가 종료되면 셀러리 작업을 다시 시도 할 수 있습니까? 나는 작업을 실행하는 하위 프로세스를 의미하는 것이 아니라 전체 서버를 사용할 수 없게됩니다.셀러리 작업자가 열심히 죽으면 작업이 다시 시도됩니까?

나는 중개인으로 RabbitMQ와 Redis를 시도했다. 두 경우 모두 현재 처리중인 작업은 완전히 잊어 버리게됩니다. 작업자가 다시 시작되면 작업을 다시 처리하려고 시도하지 않고 Rabbit 또는 Redis를 보면 대기열이 비어 있습니다. 결과 백엔드도 비어 있습니다.

작업자가 메시지를 가져 와서 하위 프로세스가 실패하면 다시 넣을 것으로 보이지만 작업자가 또한 죽으면 다시 넣을 수 없습니다.

은 (예, 나는이 년에 한 번 이상 발생하는 환경에서 작동, 나는 작업을 잃고 싶지 않아)

답변

0

이론적으로, 트릭을해야 task_acks_late=True을 설정합니다. (doc)

Redis 브로커에서는 visibility_timeout 이후에 작업이 다시 전달되며, 기본값은 1 시간입니다. (doc)

RabbitMQ를 사용하면 Rabbit이 작업자가 사망 한 것으로 인식되는 즉시 작업이 다시 전달됩니다.

+0

독약이 계속 전달 될 것이고, 멈추지 않을 것이라는 점에 유의하십시오. –

관련 문제