From 7fd6db2758e35476d4f67037d7ad8f02908fd2ef Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 24 Jul 2020 12:55:37 +0800 Subject: [PATCH] maxConnections and maxConnectionsPerHost --- .../com/foxinmy/weixin4j/http/HttpParams.java | 30 +++++++++++++++---- .../apache3/HttpComponent3Factory.java | 7 +++-- .../apache4/HttpComponent4_1Factory.java | 12 ++++---- .../apache4/HttpComponent4_2Factory.java | 2 ++ .../support/okhttp/OkHttpClient2Factory.java | 2 ++ .../support/okhttp/OkHttpClient3Factory.java | 4 +++ weixin4j-server/pom.xml | 29 +++++++----------- .../com/foxinmy/weixin4j/util/ClassUtil.java | 2 +- .../weixin4j/server/test/MessagePush.java | 2 +- 9 files changed, 55 insertions(+), 35 deletions(-) diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/HttpParams.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/HttpParams.java index 6ad51e01..83d8ccb2 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/HttpParams.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/HttpParams.java @@ -17,11 +17,19 @@ public final class HttpParams { /** * 连接超时时间(单位毫秒) */ - private int connectTimeout; + private final int connectTimeout; /** * 读取超时时间(单位毫秒) */ - private int readTimeout; + private final int readTimeout; + /** + * 最大连接数 + */ + private final int maxConnections; + /** + * 每个host最大连接数 + */ + private final int maxConnectionsPerHost; /** * 代理对象 */ @@ -36,15 +44,17 @@ public final class HttpParams { private HostnameVerifier hostnameVerifier; /** - * connectTimeout = 15000,readTimeout=20000 + * connectTimeout = 15000,readTimeout=20000,maxConnection=100,maxConnectionPerHost=32 */ public HttpParams() { - this(5000, 15000); + this(5000, 15000,100,32); } - public HttpParams(int connectTimeout, int readTimeout) { + public HttpParams(int connectTimeout, int readTimeout,int maxConnections,int maxConnectionsPerHost) { this.connectTimeout = connectTimeout; this.readTimeout = readTimeout; + this.maxConnections = maxConnections; + this.maxConnectionsPerHost = maxConnectionsPerHost; } public int getConnectTimeout() { @@ -55,6 +65,14 @@ public final class HttpParams { return readTimeout; } + public int getMaxConnections() { + return maxConnections; + } + + public int getMaxConnectionsPerHost() { + return maxConnectionsPerHost; + } + public Proxy getProxy() { return proxy; } @@ -84,7 +102,7 @@ public final class HttpParams { public static HttpParams copy(final HttpParams params) { return new HttpParams(params.getConnectTimeout(), - params.getReadTimeout()).setProxy(params.getProxy()) + params.getReadTimeout(),params.getMaxConnections(),params.getMaxConnectionsPerHost()).setProxy(params.getProxy()) .setHostnameVerifier(params.getHostnameVerifier()) .setSSLContext(params.getSSLContext()); } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache3/HttpComponent3Factory.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache3/HttpComponent3Factory.java index d34ad624..cf4e62c6 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache3/HttpComponent3Factory.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache3/HttpComponent3Factory.java @@ -5,6 +5,7 @@ import java.net.InetSocketAddress; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpConnectionManager; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; +import org.apache.commons.httpclient.params.HttpConnectionManagerParams; import org.apache.commons.httpclient.protocol.Protocol; import com.foxinmy.weixin4j.http.HttpParams; @@ -62,8 +63,10 @@ public class HttpComponent3Factory extends HttpClientFactory { new SSLProtocolSocketFactory(params.getSSLContext()), 443)); } - httpClient.getHttpConnectionManager().getParams() - .setConnectionTimeout(params.getConnectTimeout()); + HttpConnectionManagerParams params_ = httpClient.getHttpConnectionManager().getParams(); + params_.setMaxTotalConnections(params.getMaxConnections()); + params_.setDefaultMaxConnectionsPerHost(params.getMaxConnectionsPerHost()); + params_.setConnectionTimeout(params.getConnectTimeout()); } } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1Factory.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1Factory.java index bad711bd..2cd4b4c9 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1Factory.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1Factory.java @@ -40,14 +40,9 @@ public class HttpComponent4_1Factory extends HttpClientFactory { * * @see HTTPCLIENT-1193 - * @param clientConnectionManager */ public HttpComponent4_1Factory() { - PoolingClientConnectionManager clientConnectionManager = new PoolingClientConnectionManager(); - clientConnectionManager.setMaxTotal(30); - clientConnectionManager.setDefaultMaxPerRoute(clientConnectionManager - .getMaxTotal()); - httpClient = new DefaultHttpClient(clientConnectionManager); + httpClient = new DefaultHttpClient(new PoolingClientConnectionManager()); httpClient.getParams().setParameter( CoreProtocolPNames.HTTP_CONTENT_CHARSET, Consts.UTF_8); httpClient.getParams().setParameter( @@ -110,6 +105,11 @@ public class HttpComponent4_1Factory extends HttpClientFactory { httpClient.getConnectionManager().getSchemeRegistry() .register(scheme); } + ClientConnectionManager connectionManager = httpClient.getConnectionManager(); + if(connectionManager instanceof PoolingClientConnectionManager){ + ((PoolingClientConnectionManager) connectionManager).setMaxTotal(params.getMaxConnections()); + ((PoolingClientConnectionManager) connectionManager).setDefaultMaxPerRoute(params.getMaxConnectionsPerHost()); + } } } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_2Factory.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_2Factory.java index d313df63..091487bf 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_2Factory.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_2Factory.java @@ -99,6 +99,8 @@ public class HttpComponent4_2Factory extends HttpClientFactory { clientBuilder.setHostnameVerifier(new CustomHostnameVerifier( params.getHostnameVerifier())); } + clientBuilder.setMaxConnTotal(params.getMaxConnections()); + clientBuilder.setMaxConnPerRoute(params.getMaxConnectionsPerHost()); } } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient2Factory.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient2Factory.java index 9493c493..55c8a7ae 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient2Factory.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient2Factory.java @@ -50,6 +50,8 @@ public class OkHttpClient2Factory extends HttpClientFactory { if (params.getHostnameVerifier() != null) { okClient.setHostnameVerifier(params.getHostnameVerifier()); } + okClient.getDispatcher().setMaxRequests(params.getMaxConnections()); + okClient.getDispatcher().setMaxRequestsPerHost(params.getMaxConnectionsPerHost()); } } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient3Factory.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient3Factory.java index c54fd334..499a4aa1 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient3Factory.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient3Factory.java @@ -60,6 +60,10 @@ public class OkHttpClient3Factory extends HttpClientFactory { if (params.getHostnameVerifier() != null) { clientBuilder.hostnameVerifier(params.getHostnameVerifier()); } + Dispatcher dispatcher = new Dispatcher(); + dispatcher.setMaxRequests(params.getMaxConnections()); + dispatcher.setMaxRequestsPerHost(params.getMaxConnectionsPerHost()); + clientBuilder.dispatcher(dispatcher); } } diff --git a/weixin4j-server/pom.xml b/weixin4j-server/pom.xml index b67857f1..5eaa9b8e 100644 --- a/weixin4j-server/pom.xml +++ b/weixin4j-server/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 @@ -15,7 +16,7 @@ io.netty - netty-all + netty-codec-http 4.1.42.Final @@ -33,26 +34,10 @@ junit junit - - org.apache.httpcomponents - httpcore - 4.2.5 - test - org.apache.httpcomponents httpclient - 4.3.6 - - - commons-codec - commons-codec - - - org.apache.httpcomponents - httpcore - - + 4.2 test @@ -60,6 +45,12 @@ spring-context 4.2.0.RELEASE true + + + commons-logging + commons-logging + + \ No newline at end of file diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/ClassUtil.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/ClassUtil.java index 0521d062..69ffd922 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/ClassUtil.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/ClassUtil.java @@ -61,7 +61,7 @@ public final class ClassUtil { } } if (clazz == null || clazz.isEmpty()) { - clazz = new ArrayList<>(); + clazz = new ArrayList>(); try { for (URL url : ((URLClassLoader) ClassLoader.getSystemClassLoader()).getURLs()) { File file = new File(url.getFile()); diff --git a/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessagePush.java b/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessagePush.java index 26aa38be..30fc2ac2 100644 --- a/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessagePush.java +++ b/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessagePush.java @@ -27,7 +27,7 @@ import com.foxinmy.weixin4j.util.ServerToolkits; */ public class MessagePush { - private final String server = "https://localhost:30000"; + private final String server = "http://localhost:30000"; private final HttpClient httpClient; private final HttpPost httpPost; private final HttpGet httpGet;