HttpClient 异常后不重试
HttpClient doesn't retry after exception
我遇到了 HttpClient 的这个问题,它在发生异常后没有对服务器进行任何尝试。
我最初使用 CloseableHttpClient 建立连接,但我发现它不时通过 IOException。
这可能出于不同的原因,但我认为客户端会尝试连接到服务器几次。然而,事实似乎并非如此。
我的理解是 CloseableHttpClient 在语句执行后关闭连接 and/or 发生异常,因此没有重试。
我查看了 HttpClient 并在文档中指出当客户端无法建立连接时会发生自动重试
Per default HttpClient will automatically attempt to recover from the
not-fatal errors, that is, when a plain IOException is thrown.
HttpClient will retry the method three times provided that the request
has never been fully transmitted to the target server. For a detailed
discussion on HTTP method recovery please refer to the HttpClient
exception handling guide
因此,如果发生 IOException,则应该进行更多尝试。
我应该使用什么方法来确保当客户端尝试与服务器建立连接时,如果失败,它会多尝试几次?
private Map<String, String> queryResults(String query) throws OrnClientException {
try {
HttpResponse response = httpClient.execute(new HttpGet(concatURL));
final String result = EntityUtils.toString(response.getEntity());
return extractMapFromQueryResults(result);
} catch (IOException e) {
}
}
httpClient.execute(new HttpGet(concatURL));
这是我得到 IOException 的地方。
我建议您在创建客户端时使用 DefaultHttpRequestRetryHandler
这应该按照您设置的次数重试您的请求,只要它不是默认例外之一。
我遇到了 HttpClient 的这个问题,它在发生异常后没有对服务器进行任何尝试。
我最初使用 CloseableHttpClient 建立连接,但我发现它不时通过 IOException。 这可能出于不同的原因,但我认为客户端会尝试连接到服务器几次。然而,事实似乎并非如此。 我的理解是 CloseableHttpClient 在语句执行后关闭连接 and/or 发生异常,因此没有重试。
我查看了 HttpClient 并在文档中指出当客户端无法建立连接时会发生自动重试
Per default HttpClient will automatically attempt to recover from the not-fatal errors, that is, when a plain IOException is thrown. HttpClient will retry the method three times provided that the request has never been fully transmitted to the target server. For a detailed discussion on HTTP method recovery please refer to the HttpClient exception handling guide
因此,如果发生 IOException,则应该进行更多尝试。
我应该使用什么方法来确保当客户端尝试与服务器建立连接时,如果失败,它会多尝试几次?
private Map<String, String> queryResults(String query) throws OrnClientException {
try {
HttpResponse response = httpClient.execute(new HttpGet(concatURL));
final String result = EntityUtils.toString(response.getEntity());
return extractMapFromQueryResults(result);
} catch (IOException e) {
}
}
httpClient.execute(new HttpGet(concatURL));
这是我得到 IOException 的地方。
我建议您在创建客户端时使用 DefaultHttpRequestRetryHandler
这应该按照您设置的次数重试您的请求,只要它不是默认例外之一。