如何在 OkHttp 3 中为特定服务设置不同的连接超时?
How to set a different connection timeout for specific service in OkHttp 3?
在我的应用程序中,我的所有服务都有 60 seconds connection timeout
除了一项服务有 3 分钟。但是我只能为 OkHttp 3 设置一个超时?是否可以为 specific service
设置 180 秒?
OkHttpClient.Builder okHttpClient = newOkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
改造:
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(okHttpClient.build())
.addConverterFactory(GsonConverterFactory.create())
.build();
所有 HTTP 客户端配置都在 OkHttpClient 中,包括代理设置、超时和缓存。当需要更改单个调用的配置时,调用OkHttpClient.newBuilder()。此 returns 构建器与原始客户端共享相同的连接池、调度程序和配置。
在下面的示例中,我们发出一个超时为 500 毫秒的请求,另一个请求超时为 3000 毫秒。
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
Request request = new Request.Builder()
.url("http://httpbin.org/delay/1") // This URL is served with a 1 second delay.
.build();
// Copy to customize OkHttp for this request.
OkHttpClient client1 = client.newBuilder()
.readTimeout(500, TimeUnit.MILLISECONDS)
.build();
try (Response response = client1.newCall(request).execute()) {
System.out.println("Response 1 succeeded: " + response);
} catch (IOException e) {
System.out.println("Response 1 failed: " + e);
}
// Copy to customize OkHttp for this request.
OkHttpClient client2 = client.newBuilder()
.readTimeout(3000, TimeUnit.MILLISECONDS)
.build();
try (Response response = client2.newCall(request).execute()) {
System.out.println("Response 2 succeeded: " + response);
} catch (IOException e) {
System.out.println("Response 2 failed: " + e);
}
}
因此您需要为每个请求创建不同的客户端。
在我的应用程序中,我的所有服务都有 60 seconds connection timeout
除了一项服务有 3 分钟。但是我只能为 OkHttp 3 设置一个超时?是否可以为 specific service
设置 180 秒?
OkHttpClient.Builder okHttpClient = newOkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
改造:
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(okHttpClient.build())
.addConverterFactory(GsonConverterFactory.create())
.build();
所有 HTTP 客户端配置都在 OkHttpClient 中,包括代理设置、超时和缓存。当需要更改单个调用的配置时,调用OkHttpClient.newBuilder()。此 returns 构建器与原始客户端共享相同的连接池、调度程序和配置。
在下面的示例中,我们发出一个超时为 500 毫秒的请求,另一个请求超时为 3000 毫秒。
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
Request request = new Request.Builder()
.url("http://httpbin.org/delay/1") // This URL is served with a 1 second delay.
.build();
// Copy to customize OkHttp for this request.
OkHttpClient client1 = client.newBuilder()
.readTimeout(500, TimeUnit.MILLISECONDS)
.build();
try (Response response = client1.newCall(request).execute()) {
System.out.println("Response 1 succeeded: " + response);
} catch (IOException e) {
System.out.println("Response 1 failed: " + e);
}
// Copy to customize OkHttp for this request.
OkHttpClient client2 = client.newBuilder()
.readTimeout(3000, TimeUnit.MILLISECONDS)
.build();
try (Response response = client2.newCall(request).execute()) {
System.out.println("Response 2 succeeded: " + response);
} catch (IOException e) {
System.out.println("Response 2 failed: " + e);
}
}
因此您需要为每个请求创建不同的客户端。