gpt4 book ai didi

java - Apache PoolingHttpClientConnectionManager 抛出非法状态异常

转载 作者:太空狗 更新时间:2023-10-29 22:36:49 26 4
gpt4 key购买 nike

这是我的使用方法-

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 block -

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 block 中不关闭 CloseableHttpClient 解决了问题。任何人都可以说出为什么它会这样吗? 为什么关闭客户端后连接池会关闭?

上面的closeablehttpclient是池的句柄而不是单个conn

最佳答案

在 4.4 版中,方法 setConnectionManagerShared(boolean) 被添加到 HttpClientBuilder

如果将其设置为 true,客户端将不会关闭连接管理器。

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

关于java - Apache PoolingHttpClientConnectionManager 抛出非法状态异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25889925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com