我有这样的场景,我向 API 发出请求,假设我正在使用restTemplate.exchange 方法执行该请求。我确实这样设置超时:
((HttpComponentsClientHttpRequestFactory) requestFactory).setConnectTimeout(200090);
((HttpComponentsClientHttpRequestFactory) requestFactory).setReadTimeout(99999999);
((HttpComponentsClientHttpRequestFactory) requestFactory).setConnectionRequestTimeout(200900);
当我在线时,一切正常,但是,当我按下发出请求并弹出网络电缆时,它会等待 10-20 秒(不是我的超时),并抛出 SocketTimeoutException ,就是这样,我调试后,尝试应用许多解决方案,但找不到任何有价值的东西。有人在使用 RestTemplate 和 Spring 时遇到过这种情况吗? (在调试中,所有内容都已相应设置,我的所有超时都存在,即使我使用工厂,它也会使用正确的实例)。
我想要的场景是:输入请求 -> 断开网线 -> 应用程序遵循其中设置的超时,只有在它之后才会给出错误或其他任何情况。我该如何解决这个问题?
Java JDK 1.8,httpclient-4.5.12,Spring 4.3.12-RELEASE。
所以,无论谁遇到这个问题,问题都出在主机 ip 上,如果它存在,则从某个地方需要 20 秒,但是如果它不可用,则需要超时。