Client Plugin
실패한 요청 재시도
코드 예시: client-retry
기본적으로 Ktor 클라이언트는 네트워크 또는 서버 오류로 인해 실패한 요청을 재시도하지 않습니다. HttpRequestRetry 플러그인을 사용하여 실패한 요청에 대한 재시도 정책을 다양한 방법으로 구성할 수 있습니다. 예를 들어, 재시도 횟수를 지정하거나, 요청 재시도 조건을 구성하거나, 재시도 전에 요청을 수정할 수 있습니다.
의존성 추가
HttpRequestRetry
는 ktor-client-core 아티팩트만 필요하며 특정 의존성을 요구하지 않습니다.
HttpRequestRetry 설치
HttpRequestRetry
를 설치하려면 클라이언트 구성 블록 내의 install
함수에 전달하면 됩니다.
kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.*
//...
val client = HttpClient(CIO) {
install(HttpRequestRetry)
}
HttpRequestRetry 구성
기본 재시도 구성
아래 실행 가능한 예시는 기본 재시도 정책을 구성하는 방법을 보여줍니다.
kotlin
val client = HttpClient(CIO) {
install(HttpRequestRetry) {
retryOnServerErrors(maxRetries = 5)
exponentialDelay()
}
}
retryOnServerErrors
함수는 서버로부터5xx
응답을 받은 경우 요청 재시도를 활성화하며 재시도 횟수를 지정합니다.exponentialDelay
는 재시도 간에 지수적 지연을 지정하며, 이는 지수 백오프(Exponential backoff) 알고리즘을 사용하여 계산됩니다.
지원되는 구성 옵션에 대한 자세한 내용은 HttpRequestRetryConfig에서 확인할 수 있습니다.
재시도 조건 구성
요청 재시도 조건을 구성하거나 지연 로직을 지정할 수 있는 구성 설정도 있습니다.
kotlin
install(HttpRequestRetry) {
maxRetries = 5
retryIf { request, response ->
!response.status.isSuccess()
}
retryOnExceptionIf { request, cause ->
cause is NetworkError
}
delayMillis { retry ->
retry * 3000L
} // 3, 6, 9 등 초 단위로 재시도
}
재시도 전에 요청 수정
재시도 전에 요청을 수정해야 하는 경우 modifyRequest
를 사용하십시오.
kotlin
install(HttpRequestRetry) {
// 재시도 조건
modifyRequest { request ->
request.headers.append("x-retry-count", retryCount.toString())
}
}