RxJava 지수 백오프

임재영·2021년 10월 14일
0
  • 오류 응답이 연속 될 때마다 재시도 간 대기 시간을 지수 간격(2의 n승)으로 늘려나가는 기법
  • 백그라운드에서 반드시 처리 되어야 하는 작업이 요청 시점의 불안정한 네트워크 환경으로 인하여 정상적으로 처리되지 못하는 경우를 방지하기 위한 알고리즘

How to use

  • 안드로이드 기준, 아래 RxJava 의존성 필요
dependencies {
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.10'
}
  • 다음과 같이 코드 작성해서 사용
CompositeDisposable disposable = new CompositeDisposable();
disposable.add(myApi.getDataWithFlowable(_url) 
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread()) //Schedulers.newThread() | AndroidSchedulers.mainThread()
                .retryWhen(new RetryWithExponentialDelay(retryCount))
                .subscribe(resp -> {
                    // 성공 처리
                }, throwable -> {
                    // 지수 백오프 요청이 완전히 실패했을 때 처리
                    throwable.printStackTrace();
                }));
  • myApi.getDataWithFlowable(_url)Flowable을 반환하는 Retrofit 인스턴스

  • new RetryWithExponentialDelay(retryCount)retryCount는 내가 최대로 수행하고 싶은 재시도 횟수.
    재시도 횟수를 거듭 할수록 2의 n승 단위로 대기 시간이 길어지기 때문에 적정한 retryCount 정의 필요.

적용 결과

profile
어제의 나보다 더 나은 사람이 되자

0개의 댓글