J’essaie de bash un serveur en utilisant le client http en utilisant PoolingClientConnectionManager
définissant des connexions maximales pour des hôtes individuels
//Code that inilizes my connection mananger and http client
HttpParams httpParam = httpclient.getParams (); HttpConnectionParams.setSoTimeout (httpParam, SOCKET_TIMEOUT);
HttpConnectionParams.setConnectionTimeout(httpParam, CONN_TIMEOUT); httpclient.setParams(httpParam); //Run a thread which closes Expired connections new ConnectionManager(connManager).start(); //Code that executes my request HttpPost httpPost = new HttpPost(url); HttpEntity httpEntity = new SsortingngEntity(request, "UTF-8"); httpPost.setEntity(httpEntity); Header acceptEncoding = new BasicHeader("Accept-Encoding", "gzip,deflate"); httpPost.setHeader(acceptEncoding); if(contenttype != null && !contenttype.equals("")){ Header contentType = new BasicHeader("Content-Type", contenttype); httpPost.setHeader(contentType); } InputStream inputStream = null; LOG.info(dataSource + URL + url + REQUEST + request); HttpResponse response = httpclient.execute(httpPost);
C’est-à-dire que nous utilisons le pool de connexion pour la persistance http.
Nous obtenons cette erreur de manière sporadique:
The target server failed to respond org.apache.http.NoHttpResponseException: The target server failed to respond at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95) at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62) at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254) at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289) at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252) at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191) at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300) at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:517) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
Est-ce que quelqu’un sait comment résoudre ce problème?
Nous fermons également les connexions inactives.
Est-ce que certains peuvent aider?
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html
Probablement, c’est un bogue dans le HttpClient.
Si vous utilisez HttpClient 4.4, essayez de passer à la version 4.4.1.
Si vous voulez plus d’informations, consultez ce lien .
Si vous ne pouvez pas mettre à niveau, les liens suivants peuvent être utiles.
http://www.nuxeo.com/blog/using-httpclient-properly-avoid-closewait-tcp-connections/
Bonne chance!
Récemment confronté similaire en utilisant HttpClient 5
.
Sur l’ HttpClient
journaux HttpClient
et constaté que le problème était dû à des connexions obsolètes.
L’ajout du ci-dessous a aidé à résoudre le problème, il détecte et valide les connexions devenues obsolètes tout en restant inactif dans le pool avant d’être réutilisé.
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); connectionManager.setValidateAfterInactivity(timeinmilliseconds);