2011-11-28 6 views
1

저는 일괄 처리 작업을 배포하기 위해 Python/pika와 함께 RabbitMQ를 사용하고 있습니다. 그래서 저는 매우 일반적인 시나리오를 가지고 있다고 생각합니다. 하나의 프로세스가 작업 대기열로 채워집니다. 여러 작업자가 작업을 검색하고 데이터를 변환하여 결과를 두 번째 대기열에 넣습니다. 또 다른 단일 프로세스는 결과를 검색하여 병합합니다. 지금까지 아주 잘 작동합니다. 하지만 스크립트를 제어 된 방식으로 중지하려면 어떻게해야합니까? 대기열을 "무효화"하는 기능을 일부 구축했기 때문에 더 이상 작업이 채워지지 않을 것이라는 점을 알 수 있습니다."Invalidate"RabbitMQ 큐 또는 "DONE 신호"보내기

답변

0

아니요, 게시자가 AMQP의 대기열에 게시중인 사람의 수를 확인할 방법이 없습니다. 자신의 시스템을 롤백해야합니다.

이 작업을 수행하는 방법은 모든 작업자가 대기열을 바인딩 ("제어"교환이라고 부름)하고 게시자가 완료 될 때 특수 메시지를 보내도록하는 것입니다 (fanout). 그런 다음 작업자는 자신의 "제어"대기열을 확인하여 게시자가 아직 있는지 확인할 수 있습니다. 그렇지 않고 사용할 수있는 메시지가 더 이상 없으면 안전하게 연결 해제하고 종료 할 수 있습니다.