오류 재시도 / 지수 백오프
오류 재시도 (AWS)
Glue, Athena SDK를 통해 각 서비스에 요청을 보내는 것에는 제한량이 있다.
초당 허용된 제한량을 초과하면 Rate exceeded, status code: 400 또는 Too Many Request와 관련된 오류 메시지가 발생한다.
AWS SDK for Java는 내부적으로 retry 로직이 구현되어 있는데 필요에 따라 애플리케이션 코드에서 지수 백오프를 구현하여 오류를 방지하는 코드를 작성해야 한다.
-
https://docs.aws.amazon.com/ko_kr/general/latest/gr/api-retries.html
-
https://docs.aws.amazon.com/general/latest/gr/api-retries.html
오류 재시도 (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.