2016-08-07 2 views
0

나는 그들이 조작 할 파일에 대한 정보를 얻기 위해 여러 명의 작업자가 동일한 대기열에 액세스해야하는 프로젝트 작업을하고 있습니다. 파일 크기는 단순한 메가 바이트에서 수백 기가 바이트에 이르기까지 다양합니다. 이러한 이유 때문에 가시성 타임 아웃은 얼마나 걸릴지 확신 할 수 없으므로 의미가없는 것처럼 보입니다. 나는 두 가지 방법을 가지고 있지만, 더 좋은 방법이 있다면 알려 주시기 바랍니다.다른 작업자가 현재 처리중인 메시지에 액세스하지 못하게하는 방법은 무엇입니까?

  1. 메시지는 원래 큐에서 삭제되고 대기열을 '대기'는 에 넣어. 프로그램이 파일 처리를 마쳤 으면 이 삭제하고, 그렇지 않으면 메시지가 대기열에서 삭제되고 이 원래 대기열에 다시 저장됩니다.

  2. 메시지 ID는 데이터베이스로 확인됩니다. 메시지 ID가 이면 발견되지 않습니다. 그렇지 않으면 프로그램이 메시지 처리를 시작하고 메시지 ID를 데이터베이스에 삽입합니다.

미리 감사드립니다.

답변

1

기본적으로 제공되는 SQS 시간 초과를 사용하지만 ChangeMessageVisibility을 활용하십시오.

여러 가지 방법으로 제한 시간을 지정할 수 있습니다

큐가 생성된다
  • (기본 시간 제한)
  • 메시지가 SQS 및 확장에 다시 노동자 전화를 가짐으로써
  • 검색됩니다 시간 초과

적절한 처리 시간을 모를 것이라고 걱정되면 기본값 인이 대부분의 상황에 적합하지만 너무 커서 작업을 불필요하게 지연시키지 않습니다.

그런 다음 직원을 으로 수정하여 ChangeMessageVisiblity을 정기적으로 호출하여 SQS를 호출하여 제한 시간을 연장하십시오 (). 작업자가 사망하면 메시지가 확장되지 않고 대기열에 다시 나타나 다른 작업자가 처리합니다.

참조 : MessageVisibility documentation