오늘도 더 나은 코드를 작성하였습니까?

Ktor Retrying failed requests 본문

Ktor/Client

Ktor Retrying failed requests

hik14 2022. 7. 19. 18:56

기본적으로 Ktor 클라이언트는 네트워크 또는 서버 오류로 인해 실패한 request를 재시도하지 않습니다.

HttpRequestRetry 플러그인을 사용하여 실패한 요청에 대한 재시도 정책을 다양한 방법으로 구성할 수 있습니다. 

 

- 재시도 횟수 지정

- 요청 재시도 조건 

- 재시도 전에 요청 수정

Install HttpRequestRetry

val client = HttpClient(CIO) {
    install(HttpRequestRetry)
}

Configure HttpRequestRetry

Basic retry configuration

val client = HttpClient(CIO) {
    install(HttpRequestRetry) {
        retryOnServerErrors(maxRetries = 5)
        exponentialDelay()
    }
}

retryOnServerErrors 함수는 서버에서 5xx 응답을 수신하고 재시도 횟수를 지정하는 경우 요청 재시도를 활성화.

exponentialDelay는 지수 백오프 알고리즘을 사용하여 계산되는 재시도 간의 지수 지연을 지정

 

Configure retry conditions

request 재시도 조건, delay를 지정할 수 있는 구성 설정도 있습니다

install(HttpRequestRetry) {
    maxRetries = 5
    retryIf { request, response ->
        !response.status.isSuccess()
    }
    retryOnExceptionIf { request, cause ->
        cause is NetworkError
    }
    delayMillis { retry ->
        retry * 3000L
    } // retries in 3, 6, 9, etc. seconds
}

Modify a request before retrying

재시도하기 전에 요청을 수정해야 하는 경우 modifyRequest를 사용.

install(HttpRequestRetry) {
    // Retry conditions
    modifyRequest { request ->
        request.headers.append("x-retry-count", retryCount.toString())
    }
}

 

'Ktor > Client' 카테고리의 다른 글

Ktor Response validation  (0) 2022.07.20
Ktor User agent  (0) 2022.07.19
Ktor requests  (0) 2022.07.19
ktor(client Engines)  (0) 2022.07.15
Ktor(client)  (0) 2022.07.15