所以我读了这篇文章https://www.baeldung.com/httpclient-timeout,它说如果httpclient尝试连接的基础服务的DNS具有配置的多个IP,则连接超时会增加其自身的代价。
因此,如果我将连接超时设置为100ms,并且被叫服务DNS映射了5个IP,那么我假设最大的连接超时是500ms,假定最后一个IP有效。
是否有一种方法可以限制此连接超时,无论作为客户端的基础服务拓扑是什么,我将始终对此保持怀疑。
答案 0 :(得分:0)
据我了解,您没有在5个或更多IP情况下运行代码的情况,而是出于好奇。所以这就是我的经验:
由于您使用的是RestTemplate
,默认情况下使用的是SimpleClientHttpRequestFactory
。
并且随着连接超时的定义:
连接超时是进行初始设置时的超时 连接;即完成TCP连接握手并获取 已连接到请求的服务器。
就理论而言: 无论基础服务拓扑如何,RestTemplate都会尝试根据连接超时值进行连接。
为了弄清楚您的情况下的almost exact timeout
,您必须运行一些延迟测试,打印restTemplate
为获得200 OK
所花费的时间差。
此外,SimpleClientHttpRequestFactory
在内部使用HttpURLConnection
,其默认超时为infinite
(0 / -1)。
是的,在极少数情况下也观察到,除非明确调用Thread.interrupt()
结束连接,否则连接会一直尝试。
因此,描述您的读取超时值和连接超时值至关重要,这样您就可以将连接的上限限制为您定义的限制。
希望这会有所帮助。