я установка RestTemplate и AsyncRestTemplate в моем проекте, подобное следующему:Как установить тайм-аут на AsyncRestTemplate от Spring?
http://vincentdevillers.blogspot.fr/2013/10/a-best-spring-asyncresttemplate.html
Я заметил, что таймаут соединения фактически не работает, если я не изменить httpRequestFactory() фасоли в быть следующими:
@Bean
public ClientHttpRequestFactory httpRequestFactory() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient());
factory.setConnectTimeout(DEFAULT_READ_TIMEOUT_MILLISECONDS);
factory.setReadTimeout(DEFAULT_READ_TIMEOUT_MILLISECONDS);
return factory;
}
Если установить DEFAULT_READ_TIMEOUT_MILLISECONDS до 5, тайм-аут происходит, когда я использую restTemplate (как ожидалось). Однако, когда я использую AsyncRestTemplate, тайм-аут не возникает. Я изменил asyncHttpRequestFactory(), как httpRequestFactory(), но не кубик.
@Bean
public AsyncClientHttpRequestFactory asyncHttpRequestFactory() {
HttpComponentsAsyncClientHttpRequestFactory factory = new HttpComponentsAsyncClientHttpRequestFactory(asyncHttpClient());
factory.setConnectTimeout(DEFAULT_READ_TIMEOUT_MILLISECONDS);
factory.setReadTimeout(DEFAULT_READ_TIMEOUT_MILLISECONDS);
return factory;
}
Вот как я пытаюсь использовать AsyncRestTemplate в MVC контроллер Spring:
String url = "...";
// Start the clock
long start = System.currentTimeMillis();
ListenableFuture<ResponseEntity<String>> results = asyncRestTemplate.getForEntity(url, String.class);
// Wait until the request is finished
while (!(results.isDone())) {
Thread.sleep(10); //millisecond pause between each check
}
System.out.println("Elapsed time: " + (System.currentTimeMillis() - start));
return results.get().getBody();
Как я могу получить AsyncRestTemplate читать мои настройки тайм-аута соединения?
В соответствующей заметке https://spring.io/guides/gs/async-method/ использует @Async и RestTemplate и, похоже, выполняет то, что я ищу. В чем преимущество использования AsyncRestTemplate над RestTemplate?
Глядя на источник, 'HttpComponentsAsyncClientHttpRequestFactory' игнорирует свойства' connectTimeout' и 'readTimeout'. Я не знаю, почему. –