所以我读了这篇文章https://www.baeldung.com/httpclient-timeout,它说如果httpclient尝试连接的底层服务的DNS配置了多个IP,连接超时会增加自己的惩罚。
因此,如果我将连接超时设置为100毫秒,并且被叫服务DNS有5个IP映射到它,那么我假设最大连接超时为500毫秒,假设最后的IP是有效的。
有没有办法在这个连接超时上设置上限,无论底层服务拓扑是什么作为客户端,我将永远不知道它。
据我所知,你没有一个代码明智的案例来运行5个或更多的IP情况而不是好奇心。所以我的经验:
因为你使用的RestTemplate
默认使用SimpleClientHttpRequestFactory
。并且随着连接超时的定义:
连接超时是初始连接的超时时间;即完成TCP连接握手并连接到请求的服务器。
因此,就理论而言:无论底层服务拓扑如何,RestTemplate都会尝试根据连接超时值建立连接。
为了找出你的情况下的almost exact timeout
,你必须运行一些延迟测试,打印restTemplate
正在采取的时间差异来获得200 OK
。
此外,SimpleClientHttpRequestFactory
内部使用HttpURLConnection
,其默认超时为infinite
(0 / -1)。
是的,在极少数情况下也观察到,除非Thread.interrupt()
被明确地调用结束,否则连接会继续尝试。
因此,描述您的读取超时和连接超时值变得至关重要,这样您就可以将连接限制在您定义的限制之内。
希望这可以帮助。