Exception in thread "pool-1-thread-1" java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated. Make sure to release the connection before allocating another one. at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:216) at org.apache.http.impl.conn.SingleClientConnManager$1.getConnection(SingleClientConnManager.java:190) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732) at MyTask.execHttpRequest(test.java:72) at MyTask.run(test.java:60) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) java.io.InterruptedIOException: Connection has been shut down at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:543) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732) at MyTask.execHttpRequest(test.java:72) at MyTask.run(test.java:60) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Caused by: org.apache.http.impl.conn.ConnectionShutdownException at org.apache.http.impl.conn.AbstractPooledConnAdapter.assertValid(AbstractPooledConnAdapter.java:86) at org.apache.http.impl.conn.AbstractPooledConnAdapter.getRoute(AbstractPooledConnAdapter.java:112) at org.apache.http.impl.client.DefaultRequestDirector.establishRoute(DefaultRequestDirector.java:740) at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:577) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425) ... 8 more
4 Réponses :
Vous avez besoin de définir de la définition multi-threads HTTPConnectionManager, par exemple pour plus de détails, vous pouvez voir http://hc.apache.org/httpclient-3.x/threading.html p> p>
J'ai réalisé ma folie! httpClient et httpRequest étaient les deux statiques. Après que je les ai fait non statique, cela fonctionne bien! Le service exécuteur me donne un meilleur contrôle sur la gestion des threads et je tiens à l'utiliser. P>
est venu ici pour dire, MultithreadedhttpConnectionManager n'est pas à jour. Actuellement (httpClient version 4. *) C'est la voie: http://hc.apache.org/httpcomponents-Client-ga/Tutorial/html/connmgmt.html#d5e639
En plus de BPGERGO RÉPONSE - Le gestionnaire de connexion a encore mis à jour à nouveau (à la version httpclient> = 4.3), et maintenant, vous devez utiliser PoolingHttpClientConnectionManager code>. Les limitations par défaut du
PoolingHttTPClientConnectionManager code> sont au total 20 connexions et 2 par route - mais celles-ci peuvent être remplacées.
PoolingHttpClientConnectionManager cm=new PoolingHttpClientConnectionManager();
cm.setDefaultMaxPerRoute(40);
cm.setMaxTotal(500);
CloseableHttpClient client = HttpClients.createMinimal(cm);