2014-03-31 2 views
3

최근에 셀러리 프레임 워크에서 심한 상황을 경험했습니다. 대기열에 많은 메시지가 있지만 메시지가 처리되지 않았습니다. 우리는 셀러리를 다시 시작했고 메시지가 다시 처리되기 시작했습니다. 그러나 우리는 이런 상황이 다시는 일어나기를 원치 않으며 영구적 인 해결책을 찾고 있습니다.부실 작업자를 감지하는 방법 (또는 자동 다시 시작)

셀러리의 근로자가 실종 된 것처럼 보입니다. 샐러리의 문서는 부실 작업자에 대해 다음과 같이 설명합니다.

이는 작업 대기열에서 처리 대기중인 2891 개의 메시지가 있고 처리하는 소비자가 두 명 있다는 것을 나타냅니다.

대기열이 절대로 비어서는 안되는 한 가지 이유는 오래된 인력 프로세스를 사용하여 메시지를 인질로 보낼 수 있다는 것입니다. 이것은 작업자가 제대로 종료되지 않은 경우 발생할 수 있습니다.

작업자가 메시지를 수신하면 브로커는 메시지를 처리 ​​된 것으로 표시하기 전에 확인 응답을 기다립니다. 브로커는 소비자가 제대로 종료 될 때까지 다른 사용자에게 해당 메시지를 다시 보내지 않습니다. 이 문제에 충돌하는 경우

는 오류 및 비용 매뉴얼 공간을 많이 남겨 그러나이 오래된 노동자 수동 검사에 의존 documentation

를 참조 수동으로 모든 노동자를 죽이고 그들에게

를 다시 시작해야합니다 노동. 셀러리를 유지하는 좋은 해결책은 무엇입니까?

답변

0

근로자를 배치하기 위해 감독자 또는 감독자와 같은 도구를 사용할 수 있습니다 (Running the worker as daemon 참조).

또한 큐의 상태를 rabbitmq-management으로 모니터링하여 큐가 너무 커지면 RabbitMQ를 사용하고 있다고 가정합니다. celery monitoring은 모니터링을위한 일부 메커니즘도 제공합니다.

관련 문제