Skip to content
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 指定重試之間的指數延遲,該延遲使用指數退避演算法計算。

您可以進一步瞭解來自 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())
    }
}