【问题标题】:Connection timeout setting using resttemplate using closeableHttpclient使用 closeableHttpclient 使用 resttemplate 设置连接超时
【发布时间】:2019-07-26 01:36:12
【问题描述】:
所以我读了这篇文章https://www.baeldung.com/httpclient-timeout,它说如果 httpclient 尝试连接的底层服务的 DNS 配置了多个 IP,则连接超时会增加其自身的损失。
因此,如果我将连接超时设置为 100 毫秒,并且被调用的服务 DNS 有 5 个 IP 映射到它,那么我正在查看 500 毫秒的最大连接超时,假设最后一个 IP 有效。
无论作为客户端的底层服务拓扑是什么,有没有办法限制此连接超时,我将始终不知道它。
【问题讨论】:
标签:
spring
httpclient
resttemplate
【解决方案1】:
据我了解,您没有在 5 个或更多 IP 情况下运行的代码方面的案例,而是出于好奇。所以这里是我的经验:
由于您使用的是RestTemplate,默认情况下使用SimpleClientHttpRequestFactory。
正如连接超时的定义一样:
连接超时是进行初始设置的超时时间
联系;即完成 TCP 连接握手并获取
连接到请求的服务器。
所以,就理论而言:
无论底层服务拓扑如何,RestTemplate 都会尝试根据连接超时值进行连接。
为了找出您的情况下的almost exact timeout,您必须运行一些延迟测试,打印restTemplate 获取200 OK 的时间差。
此外,SimpleClientHttpRequestFactory 内部使用 HttpURLConnection,其默认超时为 infinite (0/-1)。
是的,在极少数情况下也观察到,除非明确调用 Thread.interrupt() 以结束连接,否则连接会一直尝试。
因此,描述您的读取超时和连接超时值变得至关重要,这样您就可以将连接限制在您定义的限制范围内。
希望这会有所帮助。