【问题标题】:HttpClient doesn't retry after exceptionHttpClient 异常后不重试
【发布时间】:2017-10-10 16:11:04
【问题描述】:

我遇到了 HttpClient 的这个问题,它在发生异常后没有对服务器进行任何尝试。

我最初是使用CloseableHttpClient建立连接的,我发现它时不时地通过IOException。 这可能是由于不同的原因,但我认为客户端会尝试连接到服务器几次。然而,情况似乎并非如此。 我的理解是 CloseableHttpClient 在语句执行后关闭连接和/或发生异常,因此没有重试。

我查看了 HttpClient 并在文档中指出当客户端无法建立连接时会发生自动重试

默认情况下 HttpClient 会自动尝试从 非致命错误,即抛出普通 IOException 时。 HttpClient 将重试该方法 3 次,前提是请求 从未完全传输到目标服务器。如需详细 关于HTTP方法恢复的讨论请参考HttpClient 异常处理指南

所以如果发生 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 的地方。

【问题讨论】:

  • 与您的问题相关的代码在哪里?
  • 我的帖子更新了

标签: apache httpclient ioexception


【解决方案1】:

我建议您在创建客户端时使用DefaultHttpRequestRetryHandler

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多