반응형
back off 알고리즘
통신할때 충돌이 일어난 경우 일정시간동안 기다린후 다시 호출 하는 방식
/**
* API 실행 실패에 대한 재시도 정책 적용
* Backoff Time = 재시도 횟수 * 3 SEC , 최대 3회
*
* @param apiRequest
* @return
* @throws Exception
*/
private String apiCall(APIRequest apiRequest) throws Exception {
int tryCount = 0;
boolean isSuccess = false;
String responseData = null;
do {
try {
tryCount++;
responseData = apiRequest.executeBlock(String.class);
isSuccess = true;
} catch (Exception e) {
log.error("API CALL ERROR , retry api call count = {}", tryCount , e);
if (e instanceof ConnectTimeoutException || e instanceof ConnectException || e instanceof ResponseStatusException) {
try {
if (tryCount >= 3) {
throw e;
}
TimeUnit.SECONDS.sleep(3 * tryCount);
} catch (InterruptedException e1) {
log.error("재시도 타임 아웃 대기 오류 ", e1);
}
} else {
TimeUnit.SECONDS.sleep(3);
if (tryCount >= 2) {
throw e;
}
}
}
} while (!isSuccess);
return Optional.of(responseData).orElse("");
}
반응형
'JAVA' 카테고리의 다른 글
병렬처리와 동시성 (0) | 2019.05.27 |
---|---|
CompletableFuture (0) | 2019.05.16 |
java throws bubble up 예제 (0) | 2019.05.07 |
java 8 stream throw exception bubble up (예외사항 전파) (0) | 2019.05.07 |
linux java 설치 (cent os) update-alternatives (0) | 2019.03.31 |