如果我創建了一個請求並且該請求返回4xx
錯誤Retrofit/Okhttp會不斷重試請求。我已將retryOnConnectionFailure
設置爲false,並將超時設置爲15秒,但似乎都被忽略。我錯過了什麼?Okhttp總是重試失敗的連接
private static OkHttpClient getClient() {
return new OkHttpClient.Builder()
.addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(BuildConfig.DEBUG ? HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.NONE))
.readTimeout(15, TimeUnit.SECONDS)
.connectTimeout(15, TimeUnit.SECONDS)
.retryOnConnectionFailure(false)
.addInterceptor(chain -> {
Request request = chain.request()
.newBuilder()
.build();
return chain.proceed(request);
}).build();
}
public static Retrofit getRetrofitClient(Gson gson){
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(OkHttpLogger.getClient());
if(gson != null){
builder.addConverterFactory(GsonConverterFactory.create(gson));
}else{
builder.addConverterFactory(GsonConverterFactory.create());
}
return builder.build();
}
我使用改裝2.3.0
和okhttp版本3.8.1
編輯
一個我看到的是,如果我設置了5秒的超時它完美地保持重試5秒然後給我一個失敗,但如果我碰到了10秒,它只是繼續前進,最後停止約2分鐘。
您的攔截器是否負責允許請求繼續?作爲禁用靜默請求重試的已知開關,您正確實施'retryOnConnectionFailure(false)'。 –
@ M.Palsich刪除攔截器沒有效果。我所看到的一件事是,如果我設置了5秒的超時時間,它完美地保持了5秒的重試時間,然後給了我一個失敗,但是如果我將它撞到10秒鐘,它會繼續前進,最後停止約2分鐘。 – tyczj
您是否在具有自己的TCP SYN重試設置的環境中存在的模擬器中進行測試?例如,Linux可以設置自己的TCP SYN重試限制。 –