본문으로 건너뛰기

기본 설정 및 옵션

재시도

gRPC 호출 시 응답값이 설정한 에러에 해당하는 경우, 다시 호출을 시도합니다. 재시도는 설정된 재시도 설정 항목에 따라 실행됩니다. API별로 기본적으로 재시도하는 응답과 설정은 다음과 같습니다.

재시도 에러 상태 코드

자세한 내용은 GRPC Github를 참고하시기 바랍니다.

항목설명
CANCELLED호출이 취소된 경우(보통 호출하는 곳에서 취소한 경우)
UNKNOWN알 수 없는 에러, 예를 들어 다른 주소에서 받은 상태 값이 해당 주소에서 정의되지 않은 경우 이 오류가 반환될 수 있음
- 또한 응답 오류에 대한 정보를 제공하지 않는 API인 경우에도 해당
DEADLINE_EXCEEDED호출이 완료되기 전에 데드라인이 만료됨
NOT_FOUND일부 요청한 엔티티(예: 파일 또는 경로)를 찾을 수 없음
RESOURCE_EXHAUSTED일부 리소스가 소진되었거나 사용자당 할당량이 부족하거나 전체 파일 시스템의 공간이 부족한 경우
ABORTED일반적으로 Sequencer Check에 실패하거나 트랜잭션 중간과 같은 동시성 문제로 작업이 중단된 경우
INTERNAL내부 오류
UNAVAILABLE현재 서비스를 이용할 수 없음
재시도 설정 항목
항목설명
Jittered지연 시간을 임의로 설정할지 여부를 결정
- 대부분 jitter는 true로 설정
InitialRetryDelay재시도를 처음 하기 전에 설정할 delay
- RetryDelayMultiplier에 따라 조정된 값을 사용
RetryDelayMultiplier다음 호출 retry delay = 이전 호출의 retry delay * RetryDelayMultiplier
MaxRetryDelayretry delay의 제한을 설정
- RetryMultiplier는 retry delay를 이 값을 초과하여 설정할 수 없음
InitialRpcTimeout처음 RPC에 대한 타임아웃을 설정
- RpcTimeoutMultiplier에 따라 조정된 값을 사용
RpcTimeoutMultiplier다음 호출 timeout = 이전 호출의 timeout * RpcTimeoutMultiplier
MaxRpcTimeoutRPC timeout을 설정
- RpcTimeoutMultiplier는 RPC timeout을 이 값을 초과하여 설정할 수 없음
TotalTimeout로직을 완전히 포기할 때까지, remote call을 계속 시도해야 하는 시간을 최종적으로 컨트롤함
- 이 값이 높을수록, 재시도를 더 많이 실행

Publisher retry settings

APIRetry code설명Retry setting
create topic14     UNAVAILABLE• Initial : 100ms
• Multiplier : 1.3
• Max : 60s
get topic2UNKNOWN
10ABORTED
14UNAVAILABLE
list topics2UNKNOWN
10ABORTED
14UNAVAILABLE
list topic subscriptions2UNKNOWN
10ABORTED
14UNAVAILABLE
update topic14UNAVAILABLE
delete topic14UNAVAILABLE
publish1CANCELLED
2UNKNOWN
4DEADLINE_EXCEEDED
8RESOURCE_EXHAUSTED
10ABORTED
13INTERNAL
14UNAVAILABLE

Subscriber retry settings

APIRetry code설명Retry setting
create subscription14     UNAVAILABLE• Initial : 100ms
• Multiplier : 1.3
• Max : 60s
get subscription14UNAVAILABLE
list subscriptions14UNAVAILABLE
seek14UNAVAILABLE
update subscription14UNAVAILABLE
delete subscription14UNAVAILABLE
modify ack deadline14UNAVAILABLE
acknowledge14UNAVAILABLE
pull14UNAVAILABLE
streaming pull4DEADLINE_EXCEEDED
8RESOURCE_EXHAUSTED
13INTERNAL
14UNAVAILABLE

배치 처리

API 호출 시, 메시지를 묶어 배치로 전송할 수 있습니다.

Limit Exceeded Behavior

Flow control 제한을 초과했을 때 사용할 조치

  • SignalError: 에러를 반환받습니다.
  • Block: 제한을 초과하지 않고 요청할 수 있을 때까지 대기합니다. 개별 요청의 대기 시간(latency)이 중요하지 않은 Batching Processing에서 유용합니다.
  • Ignore: flow control을 사용하지 않습니다.
APIBatching SettingsElement Count ThresholdRequest Bytes ThresholdDelay ThresholdLimit Exceeded Behavior
publish100   1000 (=1KB)   10ms     SignalError

로깅

Publish 및 StreamingPull에서 요청 및 응답(성공/실패)에 대한 로그를 통계성으로 남길 수 있습니다.

  • 시간 간격을 설정한 경우, 해당 간격마다 publish, pull의 성공/실패 횟수가 출력됩니다.
  • 출력을 확인하려는 경우, info level 이상으로 설정해야 합니다.

Logger에는 기본적으로 다음 값을 설정할 수 있습니다.

항목설명
Level로그의 레벨
- 기본값: Panic
Output로그의 아웃풋
- 기본값: os.Stdout
StatLogInterval로그를 남길 시간 간격
로깅 예시
conf := &ClientConfig{
LogOptions: &LogOptions{
Level: "info",
Output: os.Stdout,
StatLogInterval: 1 * time.Second
}
}
client, err := NewClientWithConfig(ctx, domainID, projectID, conf, opts...)