2014-10-31 7 views
1

Beanstalkd에서 작업이 TTR에 도달하면 작업을 처리하는 작업자를 죽이고 풀로 작업을 다시 릴리스합니다. 우리 시스템에서이 작업은 매우 드문 경우이며,이 경우 대신 작업을 묻어 두는 것이 좋습니다.Beanstalkd : TTR을 치는 직업을 자동 묻는 법?

어떻게하면됩니까?

(이 중요한 경우, 우리가 사용하는 PHP + Pheanstalk는)

답변

1

그것은 당신이 제대로 프로토콜을 구현하지 않은 나에게 소리. DEADLINE_SOON을 처리하고 TOUCH을 처리해야합니다.

DEADLINE_SOON은 무엇을 의미합니까?

DEADLINE_SOON은 예약 명령에 대한 응답으로 마감일이 실제 날짜 (현재 안전 여백은 약 1 초)입니다.

자주 DEADLINE_SOON 오류가 발생하는 경우 일반적으로 작업을 완료하지 않는 것이므로 작업에 대한 TTR을 늘려야합니다. 또한 작업을 완료 할 때 작업을 삭제하지 못할 수도 있습니다.

자세한 내용은 mailing list discussion을 참조하십시오.

TTR은 어떻게 작동합니까?

TTR은 예약 된 작업에만 적용됩니다. 이 이벤트에서 타이머 (작업 통계의 "시간 남음"이라고 함)는 작업의 TTR에서 카운트 다운되기 시작합니다.

  • 타이머가 0에 도달하면 작업이 준비 대기열에 다시 저장됩니다.
  • 타이머가 만료되기 전에 작업을 묻어 버리거나 삭제하거나 해제하면 타이머가 사라집니다.
  • 작업이 터치가 "타이머가 제로에 도달하기 전에 에드는 타이머가 TTR에서 카운트 다운을 통해 시작됩니다.

은"

가에 더 많은 시간을 요구하는 근로자 수 있습니다 명령 "만지지 잠재적으로 오랜 시간이 걸리는 작업에 유용하지만 여전히 은 응답이없는 작업자로부터 작업을 끌어 오는 TTR의 이점을 원합니다. 작업자 은 서버가 아직 살아 있는지 작업 처리 (예 : DEADLINE_SOON에서 가능). 명령은 명령이 _ 행된 후 TTR 초까지 자동 예약 된 작업의 릴리스를 연기합니다.

+0

필자는 프로토콜을 직접 구현하지 않고 Beanstalkd에 널리 사용되는 PHP 프레임 워크 인 [Pheanstalk] (https://github.com/pda/pheanstalk)을 사용합니다. 안타깝게도 문서화에 대해서는 조금 불만이 있습니다. 따라서 제 코드에서'DEADLINE_SOON'을 어떻게 처리해야할지 모르겠습니다. 그러나 나는'touch() '를 살펴볼 것이다. 감사! – DOOManiac

+0

프로토콜 구현은 프로토콜을 따르는 것을 의미합니다. 따라서 Pheanstalk을 사용하여 DEADLINE_SOON을 (를) 읽는 방법을 알아야합니다. – Pentium10

+0

'DEADLINE_SOON'에서 더 이상 아무것도 찾을 수 없었지만'touch() '를 적절하게 호출하여 문제를 해결할 수있었습니다. 감사! – DOOManiac