J'essaie de frapper un serveur en utilisant le client http en utilisant PoolingClientConnectionManager
en définissant les connexions max pour les 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 StringEntity(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 connexions pour la persistance http.
Nous obtenons cette erreur sporadiquement:
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)
Quelqu'un sait-il comment résoudre ce problème?
Nous fermons également les connexions inactives.
Certains peuvent-ils m'aider.
http://hc.Apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html
Il s'agit probablement d'un bogue dans HttpClient.
Si vous utilisez HttpClient 4.4, veuillez essayer de passer à 4.4.1.
Si vous souhaitez plus d'informations, veuillez consulter 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 lors de l'utilisation de HttpClient 5
.
En activant les journaux HttpClient
et constaté que le problème était dû à des connexions obsolètes.
L'ajout de ce qui suit a aidé à résoudre le problème, il détecte et valide les connexions qui sont devenues obsolètes tout en restant inactives dans le pool avant réutilisation.
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setValidateAfterInactivity(timeinmilliseconds);