我正在尝试理解restTemplate上可用的readTimeout,它究竟是什么?
它是在我们获得超时异常之前请求可以花费的总时间吗?
最佳答案
您可以在RestTemplate上定义读取超时,如下所示:
HttpComponentsClientHttpRequestFactory clientRequestFactory = new HttpComponentsClientHttpRequestFactory();
// set the read timeot,this value is in miliseconds
clientRequestFactory.setReadTimeout(500);
RestTemplate restTemplate = new RestTemplate(clientRequestFactory);
给定一个X millis的readTimeout,通过RestTemplate实例发出的任何超过X millis的请求将导致一个ResourceAccessException,包含一个java.net.SocketTimeoutException,并带有异常消息:“Read timed out”.
超时实际上是由HttpClient实例中的套接字连接器实现的,该实例由RestTemplate包装,因此当请求首次命中该套接字时,时钟开始,当这些请求首先出现时停止:请求完成或达到readTimeout.
实际上,这意味着任何花费超过配置的readTmeout的请求都将因超时异常而失败.