【问题标题】:Connection time out is not working in HttpClient连接超时在 HttpClient 中不起作用
【发布时间】:2020-07-29 19:03:25
【问题描述】:

我在我的 java 代码中使用 HttpClient 4.3.6 进行 POST HTTP 调用。我在通话后收到 504 网关超时错误,因此我使用以下 2 种方法设置了连接超时:

1--------

RequestConfig requestConfig =
RequestConfig.custom().setConnectTimeout(180 * 1000).build();
final HttpClient httpClient = 
          HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();
final HttpClient httpClient = HttpClientBuilder.create().build();

final HttpPost postRequest = new HttpPost(utility.getUrl());

2---------

final HttpClient httpClient = HttpClientBuilder.create().build();

final HttpPost postRequest = new HttpPost(utility.getUrl());

RequestConfig rc = RequestConfig.DEFAULT;

RequestConfig requestConfig =
            RequestConfig
                .copy(rc)
                .setSocketTimeout(180 * 1000)
                .setConnectTimeout(180 * 1000)
                .setConnectionRequestTimeout(180 * 1000)
                .build();
postRequest.setConfig(requestConfig);

在尝试上述方法超时 3 分钟后,如果 POST 响应超过 1 分钟,我会收到 504 超时。不是等到3分钟。请告诉我这里是否做错了。

【问题讨论】:

  • 如果你得到状态码 504 - 那么问题肯定不在客户端
  • 确实如此。如果客户端得到anything,则客户端没有问题,如果客户端得到504 Gateway timeout,则压倒性的preseumtpion是问题出在网关或上游。

标签: java httpclient apache-httpclient-4.x


【解决方案1】:

正如@Boris 提到的,如果您收到504,那么这绝对不是客户端,超时必须来自服务器。所有 Web 服务器都有默认的超时配置。例如检查Tomcat documentation,它将默认超时设置为 60 秒。我认为您应该检查您正在调用的网络服务器的超时配置。

【讨论】:

  • 出于某种原因,有人不喜欢我的回答 :-(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
相关资源
最近更新 更多