From a3e43fe99b2769cdf0077a1504a5b078bb3873dc Mon Sep 17 00:00:00 2001 From: YuLuo Date: Wed, 8 May 2024 11:19:49 +0800 Subject: [PATCH] optimise: create http client by connection pool (#14079) --- .../http/config/HttpClientConfig.java | 24 +++++++++++++++++++ .../http/restclient/OKHttpRestClient.java | 9 +++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/config/HttpClientConfig.java b/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/config/HttpClientConfig.java index 09e0ab92a1..fa7cb5ab3a 100644 --- a/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/config/HttpClientConfig.java +++ b/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/config/HttpClientConfig.java @@ -22,6 +22,10 @@ public class HttpClientConfig { private int connectTimeout = 6 * 1000; private int chunkLength = 8196; + private int maxIdleConnections = 20; + + private int keepAliveDuration = 30 * 1000; + private int HTTP_CLIENT_CONNECTION_MANAGER_MAX_PER_ROUTE = 20; private int HTTP_CLIENT_CONNECTION_MANAGER_MAX_TOTAL = 20; private int HTTPCLIENT_KEEP_ALIVE_DURATION = 30 * 1000; @@ -57,4 +61,24 @@ public class HttpClientConfig { public int getChunkLength() { return chunkLength; } + + public int getMaxIdleConnections() { + + return maxIdleConnections; + } + + public void setMaxIdleConnections(int maxIdleConnections) { + + this.maxIdleConnections = maxIdleConnections; + } + + public int getKeepAliveDuration() { + + return keepAliveDuration; + } + + public void setKeepAliveDuration(int keepAliveDuration) { + + this.keepAliveDuration = keepAliveDuration; + } } diff --git a/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/restclient/OKHttpRestClient.java b/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/restclient/OKHttpRestClient.java index 36ba2e6d18..762be4b2cd 100644 --- a/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/restclient/OKHttpRestClient.java +++ b/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/restclient/OKHttpRestClient.java @@ -30,6 +30,7 @@ import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Callback; +import okhttp3.ConnectionPool; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; @@ -140,11 +141,15 @@ public class OKHttpRestClient implements RestClient { } public OkHttpClient createHttpClient(HttpClientConfig httpClientConfig) { - OkHttpClient client = new OkHttpClient.Builder() + + return new OkHttpClient.Builder() .readTimeout(httpClientConfig.getReadTimeout(), TimeUnit.SECONDS) .writeTimeout(httpClientConfig.getWriteTimeout(), TimeUnit.SECONDS) .connectTimeout(httpClientConfig.getConnectTimeout(), TimeUnit.SECONDS) + .connectionPool(new ConnectionPool( + httpClientConfig.getMaxIdleConnections(), + httpClientConfig.getKeepAliveDuration(), + TimeUnit.SECONDS)) .build(); - return client; } }