Re: ManagedNHttpClientConnectionImpl Shutdown Vs. Close
On Fri, 2016-06-10 at 14:15 +, Poonam Chawla wrote: > Hello Oleg, > > > I am using Apache HttpAsycnClient 4.1 and I noticed that the > connections are not released on calling close. > Here is what I am trying to do: (Please note that it is not a > compileable code as I had to remove lines that are internal to my > company). > > > - Create CloseableHttpAsyncClient > > > CloseableHttpAsyncClient httpClientAsync; > > > SSLIOSessionStrategy sslsf = new SSLIOSessionStrategy(sslContext, > hostnameVerifier) { > @Override > protected void verifySession(HttpHost host, > org.apache.http.nio.reactor.IOSession > iosession, > SSLSession sslsession) throws SSLException { > verifySSLSession(iosession, sslsession, > sslConfig); > } > }; > > > Registry sessionStrategyRegistry > = RegistryBuilder > . create() > .register("http", NoopIOSessionStrategy.INSTANCE) > .register("https", sslsf).build(); > > > IOReactorConfig ioReactorConfig = IOReactorConfig.custom() > .setConnectTimeout((int) > clientConfig.getTimeOutMs()) > .setSoTimeout((int) clientConfig.getTimeOutMs()) > .setTcpNoDelay(false).build(); > > > ConnectingIOReactor ioReactor = new > DefaultConnectingIOReactor( > ioReactorConfig); > > > NHttpConnectionFactory > connFactory = new ManagedNHttpClientConnectionFactory(); > PoolingNHttpClientConnectionManager connManager = new > PoolingNHttpClientConnectionManager( > ioReactor,connFactory, sessionStrategyRegistry); > connManager.setDefaultMaxPerRoute(clientConfig > .getMaxConnectionsPerAddress()); > > > httpClientAsync = HttpAsyncClients.custom() > .setUserAgent(ApacheHttpClient.class.getName()) > .setConnectionManager(connManager) > .setSSLContext(sslContext) > .setSSLHostnameVerifier(hostnameVerifier) > .setSSLStrategy(sslsf).build(); > httpClientAsync.start(); > > > > > - Execute HTTPPosts using the httpClientAsync > > > try{ > // underneath creates the CloseableHttpAsyncClient > MWHttpClient client = new MWHttpClient(); > > //underneath calls httpClientAsync.execute(….) > Future<> f = client.invoke(….) > f.get() > > > //underneath calls httpClientAsync.execute(….) > f1 = httpClientAsync.execute(…) > > > catch{ > }finally{ > // spawn a new thread to close the httpClientAsync > // If there are pending requests waiting for a response and the user > calls close, > // abort the pending requests using request.abort(); > // underneath calls httpClientAsync.close(); > > > client.close(); > } > > > > > Here is a part of the entire log I am confused about: > > > 2016/06/09 16:30:34:753 EDT [DEBUG] headers - http-outgoing-0 >> > GET > /~81b806db-4546-4a7d-b623-6f0848ff6b05/requests?since=2448=protobuf=97628818-0daf-405c-a14c-4891738587b7 > HTTP/1.1 > 2016/06/09 16:30:34:753 EDT [DEBUG] headers - http-outgoing-0 >> Host: > localhost:53097 > 2016/06/09 16:30:34:753 EDT [DEBUG] headers - http-outgoing-0 >> > Connection: Keep-Alive > 2016/06/09 16:30:34:753 EDT [DEBUG] headers - http-outgoing-0 >> > User-Agent: com.mathworks.mps.client.internal.ApacheHttpClient > 2016/06/09 16:30:34:753 EDT [DEBUG] ManagedNHttpClientConnectionImpl - > http-outgoing-0 127.0.0.1:54726<->127.0.0.1:53097[ACTIVE][rw:w]: Event > set [w] > 2016/06/09 16:30:34:753 EDT [DEBUG] MainClientExec - [exchange: 12] > Request completed > 2016/06/09 16:30:34:753 EDT [DEBUG] ManagedNHttpClientConnectionImpl - > http-outgoing-0 127.0.0.1:54726<->127.0.0.1:53097[ACTIVE][rw:w]: 247 > bytes written > 2016/06/09 16:30:34:753 EDT [DEBUG] ManagedNHttpClientConnectionImpl - > http-outgoing-0 127.0.0.1:54726<->127.0.0.1:53097[ACTIVE][r:w]: Event > cleared [w] > 2016/06/09 16:30:34:852 EDT [DEBUG] InternalHttpAsyncClient - > [exchange: 12] Cancelled > 2016/06/09 16:30:34:853 EDT [DEBUG] ManagedNHttpClientConnectionImpl - > http-outgoing-0 127.0.0.1:54726<->127.0.0.1:53097[ACTIVE][r:w]: > Shutdown > 2016/06/09 16:30:34:853 EDT [DEBUG] > PoolingNHttpClientConnectionManager - Connection manager is shutting > down > 2016/06/09 16:30:34:853 EDT [DEBUG] ManagedNHttpClientConnectionImpl - > http-outgoing-1 127.0.0.1:54727<->127.0.0.1:53097[ACTIVE][r:r]: Close > 2016/06/09 16:30:34:853 EDT [DEBUG] InternalHttpAsyncClient - > [exchange: 12] connection aborted > 2016/06/09 16:30:34:854 EDT [DEBUG] InternalIODispatch - > http-outgoing-0 [CLOSED]: Disconnected > 2016/06/09 16:30:34:855 EDT [DEBUG] InternalIODispatch - > http-outgoing-1 [CLOSED]: Disconnected > 2016/06/09 16:30:34:855 EDT [DEBUG] >
ManagedNHttpClientConnectionImpl Shutdown Vs. Close
Hello Oleg, I am using Apache HttpAsycnClient 4.1 and I noticed that the connections are not released on calling close. Here is what I am trying to do: (Please note that it is not a compileable code as I had to remove lines that are internal to my company). - Create CloseableHttpAsyncClient CloseableHttpAsyncClient httpClientAsync; SSLIOSessionStrategy sslsf = new SSLIOSessionStrategy(sslContext, hostnameVerifier) { @Override protected void verifySession(HttpHost host, org.apache.http.nio.reactor.IOSession iosession, SSLSession sslsession) throws SSLException { verifySSLSession(iosession, sslsession, sslConfig); } }; Registry sessionStrategyRegistry = RegistryBuilder . create() .register("http", NoopIOSessionStrategy.INSTANCE) .register("https", sslsf).build(); IOReactorConfig ioReactorConfig = IOReactorConfig.custom() .setConnectTimeout((int) clientConfig.getTimeOutMs()) .setSoTimeout((int) clientConfig.getTimeOutMs()) .setTcpNoDelay(false).build(); ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor( ioReactorConfig); NHttpConnectionFactory connFactory = new ManagedNHttpClientConnectionFactory(); PoolingNHttpClientConnectionManager connManager = new PoolingNHttpClientConnectionManager( ioReactor, connFactory, sessionStrategyRegistry); connManager.setDefaultMaxPerRoute(clientConfig .getMaxConnectionsPerAddress()); httpClientAsync = HttpAsyncClients.custom() .setUserAgent(ApacheHttpClient.class.getName()) .setConnectionManager(connManager) .setSSLContext(sslContext) .setSSLHostnameVerifier(hostnameVerifier) .setSSLStrategy(sslsf).build(); httpClientAsync.start(); - Execute HTTPPosts using the httpClientAsync try{ // underneath creates the CloseableHttpAsyncClient MWHttpClient client = new MWHttpClient(); //underneath calls httpClientAsync.execute(….) Future<> f = client.invoke(….) f.get() //underneath calls httpClientAsync.execute(….) f1 = httpClientAsync.execute(…) catch{ }finally{ // spawn a new thread to close the httpClientAsync // If there are pending requests waiting for a response and the user calls close, // abort the pending requests using request.abort(); // underneath calls httpClientAsync.close(); client.close(); } Here is a part of the entire log I am confused about: 2016/06/09 16:30:34:753 EDT [DEBUG] headers - http-outgoing-0 >> GET /~81b806db-4546-4a7d-b623-6f0848ff6b05/requests?since=2448=protobuf=97628818-0daf-405c-a14c-4891738587b7 HTTP/1.1 2016/06/09 16:30:34:753 EDT [DEBUG] headers - http-outgoing-0 >> Host: localhost:53097 2016/06/09 16:30:34:753 EDT [DEBUG] headers - http-outgoing-0 >> Connection: Keep-Alive 2016/06/09 16:30:34:753 EDT [DEBUG] headers - http-outgoing-0 >> User-Agent: com.mathworks.mps.client.internal.ApacheHttpClient 2016/06/09 16:30:34:753 EDT [DEBUG] ManagedNHttpClientConnectionImpl - http-outgoing-0 127.0.0.1:54726<->127.0.0.1:53097[ACTIVE][rw:w]: Event set [w] 2016/06/09 16:30:34:753 EDT [DEBUG] MainClientExec - [exchange: 12] Request completed 2016/06/09 16:30:34:753 EDT [DEBUG] ManagedNHttpClientConnectionImpl - http-outgoing-0 127.0.0.1:54726<->127.0.0.1:53097[ACTIVE][rw:w]: 247 bytes written 2016/06/09 16:30:34:753 EDT [DEBUG] ManagedNHttpClientConnectionImpl - http-outgoing-0 127.0.0.1:54726<->127.0.0.1:53097[ACTIVE][r:w]: Event cleared [w] 2016/06/09 16:30:34:852 EDT [DEBUG] InternalHttpAsyncClient - [exchange: 12] Cancelled 2016/06/09 16:30:34:853 EDT [DEBUG] ManagedNHttpClientConnectionImpl - http-outgoing-0 127.0.0.1:54726<->127.0.0.1:53097[ACTIVE][r:w]: Shutdown 2016/06/09 16:30:34:853 EDT [DEBUG] PoolingNHttpClientConnectionManager - Connection manager is shutting down 2016/06/09 16:30:34:853 EDT [DEBUG] ManagedNHttpClientConnectionImpl - http-outgoing-1 127.0.0.1:54727<->127.0.0.1:53097[ACTIVE][r:r]: Close 2016/06/09 16:30:34:853 EDT [DEBUG] InternalHttpAsyncClient - [exchange: 12] connection aborted 2016/06/09 16:30:34:854 EDT [DEBUG] InternalIODispatch - http-outgoing-0 [CLOSED]: Disconnected 2016/06/09 16:30:34:855 EDT [DEBUG] InternalIODispatch - http-outgoing-1 [CLOSED]: Disconnected 2016/06/09 16:30:34:855 EDT [DEBUG] PoolingNHttpClientConnectionManager - Connection manager shut down 2016/06/09 16:30:34:855 EDT [DEBUG] PoolingNHttpClientConnectionManager - Releasing connection: [id: http-outgoing-0][route: {}->http://localhost:53097][total kept alive: 0; route allocated: 0 of 10; total allocated: 0 of 20] 2016/06/09 16:30:34:855 EDT [DEBUG]