Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache PoollightTPClientConnectionManager引发非法状态异常_Java_Connection Pooling_Apache Httpclient 4.x - Fatal编程技术网

Java Apache PoollightTPClientConnectionManager引发非法状态异常

Java Apache PoollightTPClientConnectionManager引发非法状态异常,java,connection-pooling,apache-httpclient-4.x,Java,Connection Pooling,Apache Httpclient 4.x,以下是我如何使用它- private static final PoolingHttpClientConnectionManager connPool; static { connPool = new PoolingHttpClientConnectionManager(); // Increase max total connection to 200 connPool.setMaxTotal(200);//configurable thro

以下是我如何使用它-

private static final PoolingHttpClientConnectionManager connPool;

static {

        connPool = new PoolingHttpClientConnectionManager();
        // Increase max total connection to 200
        connPool.setMaxTotal(200);//configurable through app.properties
        // Increase default max connection per route to 50
        connPool.setDefaultMaxPerRoute(20);//configurable through app.properties

}

CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(connPool) .build();
另外,我在http GET周围放置了一个finally块-

finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                LOGGER.error(e.getMessage());   
            }
        }
这是我的追踪-

java.lang.IllegalStateException: Connection pool shut down
    at org.apache.http.util.Asserts.check(Asserts.java:34)
    at org.apache.http.pool.AbstractConnPool.lease(AbstractConnPool.java:169)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.requestConnection(PoolingHttpClientConnectionManager.java:217)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:157)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
    at com.A.B.C.CustomHttpClient.doGETAndValidate(CustomHttpClient.java:44)
    at com.A.B.C.SiteMonitorTask.monitorAndUpdateEndPoints(SiteMonitorTask.java:48)
    at com.A.B.C.SiteMonitorTask.run(SiteMonitorTask.java:37)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
我正在使用Quartz计划监视Http端点的工作。。这是我的连接池配置

totalMaxHttpConn=200
maxHttpConnPerRoute=20
Maven依赖项。。工件版本

httpclient 4.3.1
httpcore 4.3.1
编辑-在finally块中没有关闭CloseableHttpClient,问题就解决了。。谁能告诉我为什么会这样如果关闭客户端,为什么连接池会关闭?


是可关闭的HttpClient,上面是池的句柄,而不是单个conn

此行为是由于HC 4.3中的错误造成的。它已在HC 4.4a1中固定。从4.4版开始,HttpClient#close应自动关闭连接池,前提是在版本4.4中的方法SetConnectionManager Shared被添加到HttpClientBuilder中,该连接池仅由客户端独占。如果将其设置为true,客户端将不会关闭连接管理器

HttpClients.custom()
            .setConnectionManager(Util.getConnectionManager()) // shared connection manager
            .setConnectionManagerShared(true)

您访问池的代码在哪里?我敢打赌,当您访问该池时,该池已被某人/某物关闭。上面的代码是否足够?我正在搜索合适的文档链接来解释这一点。您应该释放连接,而不是关闭连接。你实际上并不是在关闭一个客户。注意,客户端是您创建到HTTP URL的实际连接。CloseableHttpClient没有类似API的发布连接-这可能会有帮助吗?您知道错误id吗?没有针对该缺陷提出任何问题,但如果您愿意,我可以给您修订号。现在,通过删除httpClient.close()修复了该问题。。未测试oleg提供的版本号。我使用的是由
PoolghttpClientConnectionManager
支持的Jersey 2.6。它会有同样的问题吗?