2015-03-17 16 views
8

staram się trafić do serwera za pomocą klienta HTTP przy użyciu PoolingClientConnectionManager Ustawienie MAX połączeń dla poszczególnych hostówHttpClientError: Serwer docelowy nie odpowiedział

//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); 

To jest, że używamy puli połączeń dla trwałości http.

Jesteśmy coraz tego błędu sporadycznie:

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) 

Czy ktoś wie jak rozwiązać ten problem?

Zamykamy również połączenia bezczynne.

Może trochę Proszę o pomoc.

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

+0

Poinformuj klienta o inicjalizacji i zażądaj wykonania kodu. – vzamanillo

+0

// Kod służący do autoryzacji mojego menedżera połączeń i klienta http HttpParams httpParam = httpclient.getParams(); \t \t HttpConnectionParams.setSoTimeout (httpParam, SOCKET_TIMEOUT); \t \t HttpConnectionParams.setConnectionTimeout (httpParam, CONN_TIMEOUT); \t httpclient.setParams (httpParam); \t// Uruchomienie wątku, który zamyka wygasłe połączenia \t new ConnectionManager (connManager).początek(); –

+0

// Kod, który wykonuje moją prośbę \t \t HttpPost httpPost = new HttpPost (url); \t \t \t \t HttpEntity httpEntity = new StringEntity (żądanie, "UTF-8"); \t \t httpPost.setEntity (httpEntity); \t \t \t \t Nagłówek acceptEncoding = new BasicHeader ("Accept-Encoding", "gzip, deflate"); \t \t httpPost.setHeader (acceptEncoding); \t \t \t \t \t \t if (contentType = null && contenttype.equals ("") { \t \t \t Header contentType = new BasicHeader!) ("Content-Type", contentType); \t \t httpPost.setHeader (contentType); \t \t} \t \t \t \t InputStream inputStream = null; \t \t \t \t Odpowiedź HttpResponse = httpclient.execute (httpPost); –

Odpowiedz

1

Niedawno w obliczu podobnych sytuacji podczas korzystania z HttpClient 5.

Włączenie dzienników HttpClient i okazało się, że przyczyną problemu były nieaktualne połączenia.

Dodanie poniższych informacji pomogło rozwiązać problem, wykryło i zweryfikowało połączenia, które stały się nieaktualne, pozostając nieaktywne w puli przed ponownym użyciem.

PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); 

connectionManager.setValidateAfterInactivity(timeinmilliseconds); 
Powiązane problemy