使用closeableHttpClient使用RestTemplate进行连接超时设置

时间:2019-03-04 17:18:00

标签: spring httpclient resttemplate

所以我读了这篇文章https://www.baeldung.com/httpclient-timeout,它说如果httpclient尝试连接的基础服务的DNS具有配置的多个IP,则连接超时会增加其自身的代价。

因此,如果我将连接超时设置为100ms,并且被叫服务DNS映射了5个IP,那么我假设最大的连接超时是500ms,假定最后一个IP有效。

是否有一种方法可以限制此连接超时,无论作为客户端的基础服务拓扑是什么,我将始终对此保持怀疑。

1 个答案:

答案 0 :(得分:0)

据我了解,您没有在5个或更多IP情况下运行代码的情况,而是出于好奇。所以这就是我的经验:

由于您使用的是RestTemplate,默认情况下使用的是SimpleClientHttpRequestFactory。 并且随着连接超时的定义:

  

连接超时是进行初始设置时的超时   连接;即完成TCP连接握手并获取   已连接到请求的服务器。

就理论而言: 无论基础服务拓扑如何,RestTemplate都会尝试根据连接超时值进行连接。

为了弄清楚您的情况下的almost exact timeout,您必须运行一些延迟测试,打印restTemplate为获得200 OK所花费的时间差。

此外,SimpleClientHttpRequestFactory在内部使用HttpURLConnection,其默认超时为infinite(0 / -1)。

是的,在极少数情况下也观察到,除非明确调用Thread.interrupt()结束连接,否则连接会一直尝试。

因此,描述您的读取超时值和连接超时值至关重要,这样您就可以将连接的上限限制为您定义的限制。

希望这会有所帮助。