2011-11-18 3 views
2

저는 gearman을 사용하여 다양한 서비스를 대기열에 넣습니다. 일부는 항상 즉시 처리 할 수 ​​있고 일부는 신뢰할 수없는 외부 서비스가 필요하기 때문에 "실패"할 수 있습니다. 예를 들어 이메일을 보내는 데 자주 사용하지 못할 SMTP 서버가 필요할 수 있습니다.신뢰할 수없는 외부 의존성을 가진 기어 및 재시도 작업자

외부 서비스가 중단되면 해당 서비스가 대기열에서 필요한 모든 작업을 유지하고 가끔씩 (몇 분, 말하십시오). (서비스가 몇 시간 동안 사용 가능하지 않은 경우 전자 메일을 선택적으로 보낼 수도 있습니다.)

그러나 가능한 한 빨리 실패한 서비스가 근로자에게 전달되지 않아도되는 작업을 원합니다. 어떻게 이것을 달성 할 수 있습니까? (필요하다면 근로자에게 논리의 일부를 넣어 주어서 기쁩니다.하지만 작업자를 조종하기에는 "늦은 것 같습니다.")

답변

2

Gearman은 이미 이것을 처리해야합니다. 신뢰할 수없는 의존성을 가진 직업을 다루는 데 전문적으로 일하는 일부 노동자와 모든 직업을 수행하는 일부 노동자 또는 믿을 수없는 의존성이없는 직업을 가진 다른 직업을 다루는 사람이있는 한.

신뢰할 수있는 의존성 근로자에게 종속적 인 서비스가 실행 중임을 확인한 작업을 수락하도록 코드를 추가하십시오. 서비스가 중단 된 경우 조금 기다렸다가 다시 테스트하십시오. 서비스를 시작한 후 (서비스 무제한 계속), 서비스가 시작되면 기어맨 서버에 가입하거나, 작업을하고, 작업을 재시도하거나, 서비스를 다시 테스트하게합니다.

종속 서비스가 중단 된 반면, 서비스가 필요한 작업을 처리하면 다른 작업의 작업 대기열을 통해 계속해서 트 랜링됩니다. Gearmand는 다른 작업 유형을 처리 할 수있는 작업자가있는 경우 하나의 작업 유형에서 전체 작업 대기열 (또는 작업자)을 차단하지 않습니다.

귀하의 직무 유형과 근로자를 어떻게 정의 할 것인지에 대한 핵심은 현명한 것입니다.

EDIT--

는 아 - 하, 나는 (나는 전에 년 정도 내 Gearman을 시스템을 쓴 정말 이후를 손도 안), 내 생각은 조금을 알고 있었다. 이러한 유형의 문제에 대한 해결책은 종속 서비스를 처리하는 모든 작업자가 종속 서비스에서 오류가 감지되면 종속 작업 처리 기능을 gearmand 서버에서 등록 취소하도록하는 것이 었습니다. (현재 해당 작업을 완료하려는 모든 작업자는 오류를 반환해야합니다.) 일단 서비스가 백업되면 동일한 작업자가 해당 작업을 처리 할 수있는 기능을 다시 등록하게하십시오. 근로자가 종속 서비스의 상태를 통보 받기 위해서는 다른 통신 채널이 필요하다는 점에 유의하십시오.

희망이 있습니다.

+0

왜 그렇다고 생각하십니까? 나는 gearman이 이것을해야한다고 생각하지만, 문서의 어떤 것도 그것을 제안하지 않습니다. (그리고 작업자가 즉시 작업을 실패하게하는 실험은 작업을 처리 할 수있는 최대한 빨리 동일한 작업을 보내 게됩니다.) – mjs

+0

내 대답이 약간 업데이트되었습니다 - 내 생각은 약간 녹슬 었습니다. –