오류 재시도 / 지수 백오프

최대 1 분 소요

오류 재시도 (AWS)

Glue, Athena SDK를 통해 각 서비스에 요청을 보내는 것에는 제한량이 있다.

초당 허용된 제한량을 초과하면 Rate exceeded, status code: 400 또는 Too Many Request와 관련된 오류 메시지가 발생한다.

AWS SDK for Java는 내부적으로 retry 로직이 구현되어 있는데 필요에 따라 애플리케이션 코드에서 지수 백오프를 구현하여 오류를 방지하는 코드를 작성해야 한다.

오류 재시도 (Spring)

찾아보니 spring에서도 지원이 된다.

https://github.com/spring-projects/spring-retry

// simple example
// Exception 발생 시 1000ms 지연을 두면서 5번 시도한다.
// maxAttempts 수 만큼의 시도에도 실패한 경우
// @Recover 를 사용하여 복구 방법을 제공한다.
// 이때 @Retryable이 선언된 메소드 반환 타입과
// @Recover이 선언된 메소드의 반환 타입이 일치해야 한다.
private static int cnt;

@Retryable(value = {Exception.class}, maxAttempts = 5, backoff = @Backoff(delay = 1000))
public void foo() throws Exception {
  ++cnt;
  log.info("{}", cnt);
  throw new Exception("error");
}

@Recover
public void fooRecover() {
  log.error("Backoff fail.");
}

// print
// 1
// 2
// 3
// 4
// 5
// Backoff fail.

태그:

카테고리:

업데이트: