Warum HttpClient werfen eine SocketTimeOutException bei der Ausführung von POST
Habe ich einen ähnlichen code wie den folgenden:
try {
HttpPost post = new HttpPost(httpsUrl);
setHeaders(post);
HttpEntity entity = new StringEntity(request, "UTF-8");
post.setEntity(entity);
HttpResponse response = httpclient.execute(post);
String result = EntityReader.readContent(response.getEntity());
checkAnswer(result);
return result;
} catch (Exception e) {
throw new ZapException("Error executing the http post request: "+e.getMessage(), e);
}
Sendet er den Inhalt request
zu einem server, der per POST mit einem httpclient-Instanz, die möglicherweise schon vorher verwendet worden (es hat persistente verbindungen aktiviert, da schicken wir schon einige Anfragen an den gleichen server...).
Diese manchmal schlägt mit einem SocketTimeoutException
mit "Read timed out" als die Nachricht.
Es ist nicht klar für uns, warum es schlägt nur zu bestimmten Zeiten, wenn die meiste Zeit es nicht. Was gibt?
- Ich habe ein ähnliches problem beim senden von mehreren Anfragen zu solr w/ tomcat-7. was, schicken Sie die Anfragen an? was sind die details des Servers, da das ist, wo die Fehler stammen von
- Ich glaube, es war der Jetty-6. Aber das war schon eine Weile zurück...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich im folgenden davon ausgegangen, dass Sie mithilfe von Apache Commons HttpClient (
org.apache.commons.httpclient.HttpClient
).Vielleicht bekommen Sie geworfen
SocketTimeoutException
einfach, weil sich gelegentlich, dass die Gastgeber Ihre HttpClient-Instanz kommuniziert mit dauert zu lange, um zu reagieren, auslösen HttpClient Rücktritt routine.Erhöhen Sie das timeout der Verbindung und der socket-timeout mit der folgenden
Nachholen, wenn Sie immer noch mit timeouts trotz Erhöhung der timeout-Grenze, es ist eine gute Praxis zu behandeln, die
SocketTimeoutException
anmutig - zum Beispiel durch wiederholen der Verbindung ein zweites und drittes mal.