2010-03-02 3 views
6

작업에 대한 지연을 설정하는 옵션이있는 작업/메시지 큐를 설정해야 무료 작업자가 즉시 픽업 할 수 있지만 특정 시간 후에 작업마다 다릅니다.) Linux 큐 솔루션 (rabbitmq, gearman, memcacheq)을 살펴 보았지만이 기능을 제공하지는 못했습니다.지연이있는 단순한 확장 가능한 작업/메시지 큐

어떻게하면이 아이디어를 얻을 수 있습니까?

감사합니다.

답변

11

BeanstalkD를 사용하여 새로운 작업을 삽입 할 때 지연 옵션을 사용하여 항목을 예약 할 수있게 될 때까지 몇 초간 대기합니다.

장기간 지연 (30 초 이상)을 수행하거나 작업을 수행하는 것이 다소 중요하다면 (나중에 abeit하십시오.) 또한 이진 로깅 시스템이 있으므로 모든 데몬 충돌이 여전히 직업에 대한 기록. 즉, 나는 Beanstalkd 인스턴스를 통해 수십만 가지의 일자리를 만들었고 내가 작성한 작업자는 항상 서버보다 문제가 많았습니다.

+0

피드백을 보내 주셔서 감사합니다. 저는 지난 2-3 일간의 콩밥을 살펴 보았습니다. 그리고 당신 말이 맞아요, 작업자 논리와 관리가 까다 롭습니다 :) – idevelop

1

AMQP 중개인 (예 : RabbitMQ)을 사용할 수 있으며 교환기에 앉아 특정 메시지 (특정 routing_key)를 수신하는 "에이전트"(예 : python-amqplib를 사용하여 만든 python 프로세스)가 있습니다. 타이머가 경과하면 교환기에서 다른 routing_key으로 메시지를 다시 보냅니다.

"번역/매핑"은 routing keys이지만 작동한다는 것을 알고 있습니다. RabbitMQ와 python-amqplib로 작업하는 것은 매우 간단합니다.

+1

나는 이것을 생각했지만 대기하는 에이전트가 타이머가 대기하는 동안 죽으면 메시지가 대기열에 추가되지 않습니다. 아마도 두 번째 영구 대기열과 여러 개의 내부 타이머가있는 에이전트를 사용하여이 문제를 해결할 수 있습니다. 여전히 추악한 해결 방법 인 것 같습니다. – idevelop

+0

글쎄,이 실패 모드를 다루는 것은 게임의 일부입니다. AMQP 중개인이 요구하는 기능이 주 목표 인 : 대기 시간을 최소화하기 때문에 주류를 얻게되면 놀랄 것입니다. – jldupont

+0

답장을 보내 주셔서 감사합니다. 내가 beanstalkd에게 시도해 보겠다. 괜찮아 보인다. 내가 말했던 "지연"을지지한다. – idevelop