Eventarc의 재시도 특성은 전송 계층인 Cloud Pub/Sub의 재시도 특성과 일치합니다. 자세한 내용은 재시도 요청 및 Push 백오프를 참조하세요.
Eventarc에서 설정한 기본 메시지 보관 기간은 지수 백오프 지연이 있는 24시간입니다.
Eventarc 트리거와 연결된 Pub/Sub 구독을 통해 재시도 정책을 업데이트할 수 있습니다.
- 트리거 세부정보 페이지를 엽니다.
- 주제를 클릭합니다.
- 구독 탭을 클릭합니다.
Eventarc에서 자동으로 생성된 모든 구독은 projects/PROJECT_ID/subscriptions/eventarc-REGION-TRIGGER_ID-sub-SUBSCRIPTION_ID
형식을 취합니다. 구독 한도에 대한 자세한 내용은 Pub/Sub 리소스 한도를 참조하세요.
Pub/Sub에서 메시지를 전달하려고 하지만 대상에서 이를 확인하지 못하는 경우 Pub/Sub는 최소 지수 백오프 10초를 사용하여 메시지를 다시 전송합니다. 대상이 계속 메시지를 확인하지 않으면 각 재시도의 지연에 더 많은 시간(최대 600초)이 추가되고 메시지가 대상으로 다시 전송됩니다.
참고로 Workflows는 워크플로 실행이 시작되는 즉시 이벤트를 확인합니다.
데드 레터 주제
대상이 메시지를 수신하지 않으면 전달되지 않은 메시지를 데드 레터 주제(데드 레터 큐라고도 함)로 전달할 수 있습니다. 데드 레터 주제는 대상이 확인하지 못한 메시지를 저장할 수 있습니다. Pub/Sub 주제를 만들거나 Eventarc에서 Pub/Sub 주제를 만드는 경우가 아니라 Pub/Sub 구독을 만들거나 업데이트할 때 데드 레터 주제를 설정해야 합니다. 자세한 내용은 메시지 오류 처리를 참조하세요.
재시도를 보장할 수 없는 오류
애플리케이션에서 Pub/Sub를 이벤트 소스로 사용하고 이벤트가 전달되지 않으면 재시도를 보증할 수 없는 오류를 제외하고 이벤트가 자동으로 재시도됩니다. 모든 소스에서 워크플로 대상에 대한 이벤트는 워크플로가 실행되지 않으면 재시도되지 않습니다. 워크플로 실행이 시작되었지만 나중에 실패하면 실행은 재시도되지 않습니다. 이러한 서비스 문제를 해결하려면 워크플로 내에서 오류와 재시도를 처리해야 합니다.
중복 이벤트
중복 이벤트가 이벤트 핸들러에 전달될 수 있습니다. CloudEvents 사양에 따라 source
속성과 id
속성의 조합은 고유한 것으로 간주되므로 동일한 조합을 갖는 모든 이벤트는 중복으로 간주됩니다.
일반적으로 멱등성 이벤트 핸들러를 구현하는 것이 좋습니다.
이벤트 핸들러를 멱등성으로 만들기
재시도할 수 있는 이벤트 핸들러는 다음 일반 가이드라인을 사용하여 멱등성을 가져야 합니다.
- 다양한 외부 API를 사용하면 매개변수로 멱등 키를 제공할 수 있습니다. 이러한 API를 사용한다면 이벤트 ID를 멱등 키로 사용해야 합니다.
- 멱등성이 있으면 재시도해도 안전하므로 최소 1회 전송 시 잘 작동합니다. 따라서 안정적인 코드를 작성하기 위한 일반적인 권장사항은 재시도와 멱등성을 결합하는 것입니다.
- 코드에 내부적으로 멱등성이 있어야 합니다. 예를 들면 다음과 같습니다.
- 결과에 변화 없이 변형이 2번 이상 발생할 수 있는지 확인합니다.
- 상태가 변형되기 전에 트랜잭션에서 데이터베이스 상태를 쿼리합니다.
- 모든 부가적인 결과에 자체적으로 멱등성이 있는지 확인합니다.
- 코드에 관계없이 서비스 외부에서 트랜잭션 검사를 시행합니다. 예를 들어 특정 이벤트 ID가 이미 처리되었음을 어딘가에 기록하는 상태를 유지합니다.
- 중복 호출을 대역 외로 처리합니다. 예를 들어 중복 호출 후 삭제하는 별도의 삭제 프로세스를 둡니다.