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

这应该按照您设置的次数重试您的请求,只要它不是默认例外之一。