You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2016/05/26 21:45:52 UTC
[24/50] [abbrv] cxf git commit: [ENTESB-6912]introduce
CONNECTION_MAX_IDLE property for AHC
[ENTESB-6912]introduce CONNECTION_MAX_IDLE property for AHC
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/501922f3
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/501922f3
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/501922f3
Branch: refs/heads/master-jaxrs-2.1
Commit: 501922f3722a9cdd9577e253cee3386d40025ea4
Parents: 0c2fb8f
Author: Freeman Fang <fr...@gmail.com>
Authored: Mon May 23 14:50:01 2016 +0800
Committer: Freeman Fang <fr...@gmail.com>
Committed: Mon May 23 14:50:01 2016 +0800
----------------------------------------------------------------------
.../asyncclient/AsyncHTTPConduitFactory.java | 38 ++++++++++++++++++++
1 file changed, 38 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/501922f3/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java
----------------------------------------------------------------------
diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java
index 6434fec..f905b92 100644
--- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java
+++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java
@@ -78,6 +78,7 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
public static final String MAX_PER_HOST_CONNECTIONS
= "org.apache.cxf.transport.http.async.MAX_PER_HOST_CONNECTIONS";
public static final String CONNECTION_TTL = "org.apache.cxf.transport.http.async.CONNECTION_TTL";
+ public static final String CONNECTION_MAX_IDLE = "org.apache.cxf.transport.http.async.CONNECTION_MAX_IDLE";
//AsycClient specific props
public static final String THREAD_COUNT = "org.apache.cxf.transport.http.async.ioThreadCount";
@@ -121,6 +122,7 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
int maxConnections = 5000;
int maxPerRoute = 1000;
int connectionTTL = 60000;
+ int connectionMaxIdle = 60000;
int ioThreadCount = IOReactorConfig.DEFAULT.getIoThreadCount();
long selectInterval = IOReactorConfig.DEFAULT.getSelectInterval();
@@ -179,6 +181,7 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
maxConnections = getInt(s.get(MAX_CONNECTIONS), maxConnections);
connectionTTL = getInt(s.get(CONNECTION_TTL), connectionTTL);
+ connectionMaxIdle = getInt(s.get(CONNECTION_MAX_IDLE), connectionMaxIdle);
maxPerRoute = getInt(s.get(MAX_PER_HOST_CONNECTIONS), maxPerRoute);
if (connectionManager != null) {
@@ -371,6 +374,11 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
client = httpAsyncClientBuilder.build();
// Start the client thread
client.start();
+ if (this.connectionTTL == 0) {
+ //if the connection does not have an expiry deadline
+ //use the ConnectionMaxIdle to close the idle connection
+ new CloseIdleConnectionThread(connectionManager, client).start();
+ }
}
//provide a hook to customize the builder
@@ -384,4 +392,34 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
return client;
}
+ public class CloseIdleConnectionThread extends Thread {
+
+ private final PoolingNHttpClientConnectionManager connMgr;
+
+ private final CloseableHttpAsyncClient client;
+
+ public CloseIdleConnectionThread(PoolingNHttpClientConnectionManager connMgr,
+ CloseableHttpAsyncClient client) {
+ super();
+ this.connMgr = connMgr;
+ this.client = client;
+ }
+
+ @Override
+ public void run() {
+ try {
+ while (client.isRunning()) {
+ synchronized (this) {
+ sleep(connectionMaxIdle);
+ // close connections
+ // that have been idle longer than specified connectionMaxIdle
+ connMgr.closeIdleConnections(connectionMaxIdle, TimeUnit.MILLISECONDS);
+ }
+ }
+ } catch (InterruptedException ex) {
+ // terminate
+ }
+ }
+
+ }
}