2017-10-09 2 views
0

을 만료 나는 FIFO 큐로 전환 내가SQS FIFO 큐에서 메시지를 삭제 : 영수증 핸들

Value {VALUE} for parameter ReceiptHandle is invalid. Reason: The receipt handle has expired. 

그것은 오류가 발생 나타납니다 큐에서 메시지를 삭제하려고 할 때이 오류 메시지를 받았습니다 visibility timeout이 만료 된 후 메시지를 삭제하려고했기 때문에 기본 가시성 시간 제한을 0으로 최대 12 시간으로 변경했습니다.이 부분적으로 문제가 해결되었습니다. 때로는 12 시간 이상 대기열에있는 메시지가 실행되기 전에 오류가 발생할 수 있으므로 오류가 다시 발생합니다. 가시성 타임 아웃을 12 시간 이상으로 늘리거나 다른 방법으로이 오류를 건너 뛰는 방법이 있습니까?

답변

1

TLDR : ChangeMessageVisibility API를 조사하고 싶습니다.

에 대한 자세한 사항

가시성 제한 시간에 대한 이유는 메시지를 처리하는 프로세스가 예기치 않게 생존하고 있는지 확인하고 메시지가 다른 노동자에 의해 처리 될 수 있도록하는 것입니다.

프로세스가 구성된 가시성 시간 초과보다 오래 걸릴 필요가있는 경우, 본질적으로 "나는 아직 살아 있고이 메시지로 작업 중입니다"라는 신호를 SQS에 보내야합니다. 그것은 ChangeMessageVisibility을위한 것입니다.

메시지를 소비하고 처리하는 데 소요되는 시간이 매우 다양 할 경우 소규모 기본 표시 시간 제한을 설정하고 작업자가 여전히 작동 중임을 나타내는 "하트 비트"(ChangeMessageVisibility 사용)를 발생 시키도록 권장합니다. 메시지 작성 중. 그렇게하면 작업자가 합법적으로 실패 할 때 상대적으로 빠르게 복구 할 수 있습니다.

참고 메시지 일괄 처리에서이 작업을 수행하는 경우 ChangeMessageVisibilityBatch이 있습니다.

관련 문제