Apache HTTP 客户端超时

Apache HTTP client timeout

我正在使用 Apache HTTP 客户端联系外部服务。该服务可能需要几个小时甚至更长的时间来生成响应。我尝试了一些不同的东西,但要么以套接字结束,要么读取超时。我刚刚尝试使用 RequestConfig 将套接字和连接超时设置为 0,根据文档,这应该是无限的,但请求总是在恰好 1 小时后 returns。有什么想法吗?

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

替代方法可以解决这类问题。

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

我同意关于不要尝试让 HTTP 连接保持活动时间太久的一般观点,但是,如果您的双手被束缚,您可能会发现您在 TCP 和 TCP 级别遇到超时 keep-alives 可能会挽救这一天.

查看此 link 以获取设置 TCP keep-alive 的帮助,您不能在 HttpClient 中执行此操作 OS,这将定期发送 ACK,因此您的 TCP 连接永远不会空闲如果 HTTP 流中没有发生任何事情。

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