यदि मैं कोई अनुरोध करता हूं और वह अनुरोध 4xx
त्रुटि देता है तो रेट्रोफिट/Okhttp अनुरोध को पुनः प्रयास करता रहता है। मैंने retryOnConnectionFailure
को झूठा करने के लिए सेट किया है और 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)' को लागू करने में सही हैं। –
@ एम। पालसीच इंटरसेप्टर को हटाने का कोई प्रभाव नहीं पड़ता है। एक चीज जो मैं देखता हूं वह यह है कि यदि मैं 5 सेकंड का टाइमआउट सेट करता हूं तो यह पूरी तरह से 5 सेकंड के लिए पुनः प्रयास करता रहता है तो मुझे विफलता देता है लेकिन अगर मैं इसे 10 सेकंड तक टक्कर देता हूं तो यह अभी भी चलता रहता है और आखिरकार 2 मिनट तक बंद हो जाता है। – tyczj
क्या आप एक ऐसे एमुलेटर में परीक्षण कर रहे हैं जो पर्यावरण के भीतर मौजूद है जिसमें टीसीपी एसवाईएन रीट्रीज़ की अपनी सेटिंग है? उदाहरण के लिए, लिनक्स अपनी टीसीपी एसवाईएन पुनः प्रयास सीमा निर्धारित कर सकता है। –