Seb*_*Seb 6 spring spring-boot spring-rest
我正在尝试理解restTemplate上可用的readTimeout,它究竟是什么?
它是在我们获得超时异常之前请求可以花费的总时间吗?
Dha*_*ana 22
据我所知,在restTemplate中我们有3种类型的超时
ConnectionRequestTimeout.这是从connectionManager获取连接的毫秒超时
ConnectionTimeout.这是在源和目标之间建立连接的毫秒超时
ReadTimeout.这是以毫秒为单位的超时,它应该从目标端点返回响应/结果.
gly*_*ing 10
您可以在a上定义读取超时RestTemplate,如下所示:
HttpComponentsClientHttpRequestFactory clientRequestFactory = new HttpComponentsClientHttpRequestFactory();
// set the read timeot, this value is in miliseconds
clientRequestFactory.setReadTimeout(500);
RestTemplate restTemplate = new RestTemplate(clientRequestFactory);
Run Code Online (Sandbox Code Playgroud)
给定一个X millis 的readTimeout,通过该RestTemplate实例发出的任何请求所需的时间超过X millis将导致a ResourceAccessException,java.net.SocketTimeoutException包含一个异常消息:"read timed out".
超时实际上是由HttpClient实例中的套接字连接器实现的,该套接字连接器被包装,RestTemplate因此时钟在请求首次到达该套接字时启动,并在这些中的任何一个首先停止时停止:请求完成或达到readTimeout.
实际上,这意味着任何花费超过配置的readTmeout的请求都将因超时异常而失败.
您还可以定义一个bean:
@Bean
public RestTemplate restTemplateReadTimeout(RestTemplateBuilder builder) {
return builder
.setReadTimeout(15000) //15 seconds
.build();
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
@Autowired
@Qualifier("restTemplateReadTimeout")
private RestTemplate restTemplate;
Run Code Online (Sandbox Code Playgroud)
PS.:当我在Spring Boot上使用此配置时,我尝试RestTemplate使用不同的超时配置创建不同的Bean.但我最终看到Spring 总是只使用一个超时配置(可能使用最后注册的bean的超时),因为这个超时配置是RestTemplates中的Singleton.所以要注意这一点,我不知道我是否有些错误,错误或预期的行为.
| 归档时间: |
|
| 查看次数: |
12543 次 |
| 最近记录: |