Apache ConnectionClosedException:连接已关闭,HttpAsyncRequestExecutor.endOfInput(HttpAsyncRequestExecutor.java:344)

svs*_*eja 8 apache apache-httpcomponents apache-httpasyncclient

我们在同一个tomcat服务器上部署了三个应用程序A,B和C.在A到B之间发生了一个HTTP调用(REST CALL)和从B到C的另一个http调用(REST CALL)

我们最初使用同步HTTP调用,最近我们将代码更改为异步调用.我们使用HttpAsyncClients(应用程序A调用应用程序B)和(应用程序B调用应用程序C).

我们得到间歇性的org.apache.http.ConnectionClosedException:有时我们在应用程序A的日志(Async Client到B)和应用程序B中的某个时间(异步客户端到C)中获得此异常

 CloseableHttpAsyncClient  client = HttpAsyncClients.custom()
                    .setMaxConnPerRoute(100))
                    .setMaxConnTotal(config.getInt(150)).build();
Run Code Online (Sandbox Code Playgroud)

并且对于我们给予超时的每个请求

final RequestConfig params = RequestConfig.custom().setConnectTimeout(300000) // 5min
                    .setSocketTimeout(300000).setConnectionRequestTimeout(300000).build();
Run Code Online (Sandbox Code Playgroud)

请在下面找到堆栈跟踪:

   org.apache.http.ConnectionClosedException: Connection closed
        at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.endOfInput(HttpAsyncRequestExecutor.java:344) [httpcore-nio-4.4.5.jar:4.4.5]
        at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:261) [httpcore-nio-4.4.5.jar:na]
        at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81) [httpasyncclient-4.1.2.jar:na]
        at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39) [httpasyncclient-4.1.2.jar:na]
        at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114) [httpcore-nio-4.4.5.jar:4.4.5]
        at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162) [httpcore-nio-4.4.5.jar:4.4.5]
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337) [httpcore-nio-4.4.5.jar:4.4.5]
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315) [httpcore-nio-4.4.5.jar:4.4.5]
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276) [httpcore-nio-4.4.5.jar:4.4.5]
        at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104) [httpcore-nio-4.4.5.jar:4.4.5]
        at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:588) [httpcore-nio-4.4.5.jar:4.4.5]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_60]
Run Code Online (Sandbox Code Playgroud)

请注意这个问题不是重复的 间歇性ConnectionClosedException与httpasynclient stacj跟踪是完全不同的.事件这个问题发生间歇性.