Apache PoolingHttpClientConnectionManager löst Ausnahmebedingung für ungültigen Status aus
Hier ist, wie ich es benutze -
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();
Also habe ich endlich einen Block um http GET gesetzt -
finally {
try {
httpClient.close();
} catch (IOException e) {
LOGGER.error(e.getMessage());
}
}
Hier ist mein Stacktrace -
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)
Ich verwende Quartz, um einen Job zum Überwachen von HTTP-Endpunkten zu planen. Hier ist meine Konfiguration des Verbindungspools.
totalMaxHttpConn=200
maxHttpConnPerRoute=20
Maven Abhängigkeit .. Artefaktversion
httpclient 4.3.1
httpcore 4.3.1
BEARBEITE - Nun, das Problem wurde dadurch gelöst, dass CloseableHttpClient im finally-Block nicht geschlossen wurde. Kann jemand sagen, warum es sich so verhält?Warum wird der Verbindungspool heruntergefahren, wenn ich einen Client schließe?
Ist der obige closeablehttpclient ein Handle zum Pool und kein einzelner conn