Apache HTTP客户端超时

时间:2017-08-30 14:17:52

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

我正在使用Apache HTTP客户端联系外部服务。该服务可能需要几个小时(如果不是更长时间)来生成其响应。我尝试了一些不同的东西,但最终还是有套接字或读取超时。我只是尝试使用RequestConfig将套接字和连接超时设置为0,根据文档应该是无限的,但请求总是在1小时后返回。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

理想情况下,任何需要花费几分钟(2-3分钟左右)的服务都应该异步处理,而不是保持连接打开一个小时左右。客户端和服务器端都浪费资源。

替代方法可能是解决这些问题。

  1. 您调用服务以触发处理(准备响应)。它可能会返回一些唯一的请求ID。
  2. 然后大约一个小时后(一旦响应准备好响应),客户端再次通过传递请求ID请求,服务器返回响应。
  3. 其他替代方法可能是,一旦响应就绪,它会将响应推回到Callback URL或客户端托管另一个服务专门用于接收服务器准备的响应的步骤(步骤1)。

答案 1 :(得分:0)

我同意一般的观点,即不要试图保持HTTP连接存活这么久,但是,如果你的双手被束缚,你可能会发现你在TCP和TCP级别中保持超时可能会节省一天。

请参阅此链接以获取设置TCP保持活动的帮助,您无法在HttpClient中执行此操作系统操作,这将定期发送ACK,因此即使HTTP流中没有任何操作,您的TCP连接也永远不会空闲。

Apache HttpClient TCP Keep-Alive (socket keep-alive)

长时间保持TCP连接即使它们处于活动状态也很困难。 YMMV。