가시성 타임아웃과 하트비트를 사용하며, 시도 횟수를 제한하고, 페이로드를 편집하여 독성 메시지를 데드레터 큐로 이동시키며, 멱등성 핸들러를 요구합니다.
패키지 상태: 참조 컨텍스트가 인간 검토를 위해 준비됨. 계약과 테스트 시나리오는 완료되었으나, 이를 통과한 채택 구현체가 있다고 주장하지는 않습니다.
결정
비동기 작업자는 가시성 타임아웃과 함께 메시지를 임대하고, 작업이 계속되는 동안 하트비트로 임대를 연장합니다. 핸들러는 안정적인 작업 키에 대해 멱등성을 가집니다. 최대 시도 횟수 후 메시지는 독성으로 간주되어 페이로드 필드를 정책에 따라 편집한 후 데드레터 큐로 이동합니다. 운영자는 핸들러 결함이 수정된 후에만 데드레터 큐에서 재생합니다.
범위
- 비동기 작업자를 위한 가시성 타임아웃, 하트비트, 시도 제한, 독성 분류, 데드레터 편집, 멱등 처리, 재생.
- 아웃박스 또는 API 인큐에 의해 공급되는 큐.
- 작업이 이메일 전송일 때 알림 반송 처리와의 상호작용.
이 블록 외부
- 큐에 대한 정확히 한 번의 게시, 이는 아웃박스 블록에 속함.
- 작업자 자동 확장 정책.
계약
- 수신된 메시지는 타임아웃까지 다른 작업자에게 보이지 않으며, 작업자가 처리 중이면 타임아웃 전에 하트비트를 보냅니다.
- 하트비트가 중단되면 메시지는 다시 보이게 되어 재시도될 수 있으며, 중복 전달은 동일한 멱등성 키를 사용하고 부작용을 중복 적용하지 않아야 합니다.
- 시도 횟수는 각 임대 시 증가하며, 최대 시도 시 메시지는 조용히 삭제되지 않고 데드레터 큐로 전송됩니다.
- 데드레터 페이로드는 독성 정책에 따라 비밀, 토큰, 개인 데이터를 편집하며, 운영자는 작업 유형, ID, 오류 클래스를 계속 볼 수 있습니다.
- 독성은 핸들러 또는 페이로드 결함에 해당하며, 하위 시스템 속도 제한은 재시도 제한 내에서 백오프로 재시도해야 합니다.
- 데드레터에서의 재생은 재생 행위자를 기록하는 활성 핸들러 버전을 필요로 합니다.
구현 지침
- 가시성 타임아웃을 p99 핸들러 시간과 하트비트 간격 합보다 크게 설정하며, Amazon SQS 가시성 타임아웃과 같은 아이디어를 사용합니다.
- 처리된 작업 키를 최대 재시도 기간보다 긴 TTL로 저장합니다.
실패 처리
- 작업 중 하트비트 실패: 다른 작업자가 시작할 수 있다고 가정하며, 첫 번째 작업자는 나중에 완료되더라도 멱등성을 유지해야 합니다.
- 데드레터 큐 게시 실패: 메시지를 독성 경로 재시도를 위해 계속 보이게 유지하며, 운영자 신호 없이 최대 시도 후 메시지를 절대 삭제하지 않습니다.
검증 및 운영
- 임대 만료, 시도 히스토그램, 데드레터 큐 깊이, 편집 누락, 중복 부작용(0이어야 함)을 측정합니다.
- 알려진 인시던트에 없는 작업 유형의 데드레터 큐 깊이가 증가하면 페이지 알림을 보냅니다.
- 하나의 작업 ID에 대해 두 개의 중첩 임대가 부작용을 한 번만 적용함을 테스트로 증명합니다.
이 패키지의 실행 가능한 예제는 픽스처 및 수용 계약입니다. 컬렉션 루트에서
python tools/validate.py를 실행하여 패키지 구조와 메타데이터를 확인한 후,
대상 저장소에서 시나리오를 구현하고 실행하세요.
채택 가정
example.yaml의 이름과 숫자 값은 채택 프로필이며, 보편적 기본값이 아닙니다.- 채택 팀은 행위자, 데이터 클래스, 오류 어휘, 소유권을 자사 시스템에 매핑해야 합니다.