Возникла проблема с пониманием того, как RestTemplate обрабатывает тайм-ауты.
Я настроил RestTemplate
как Bean
, как показано:
@Bean
public RestTemplate rest(final RestTemplateBuilder builder) {
final RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
return restTemplate;
}
private ClientHttpRequestFactory getClientHttpRequestFactory() {
final int timeout = 50000;
final RequestConfig config = RequestConfig.custom().setConnectTimeout(timeout).setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();
final CloseableHttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(config).build();
return new HttpComponentsClientHttpRequestFactory(client);
}
Значение 50000 является только академическим значением.
Я использую мой RestTemplate
в Hystrix
упакованном сервисном соединителе:
@HystrixCommand(commandProperties = { @HystrixProperty(name = "execution.isolation.strategy", value = "SEMAPHORE") }, fallbackMethod = "fallbackActivityCall")
public Optional<ResponseActivityValue> callForActivity() {
final StringBuilder urlBuilder = new StringBuilder(accessConfig.getTracking().getUrl());
final HttpEntity<String> entity = new HttpEntity<>(buildAuthHeader());
final ResponseEntity<ResponseActivityValue> re = restTemplate.exchange(urlBuilder.toString(), HttpMethod.GET, entity, ResponseActivityValue.class);
final HttpStatus code = re.getStatusCode();
return Optional.ofNullable(re.getBody());
}
Я проверил это, когда служба перестала звонить. Вместо ожидаемого значения 50000 метод возвращается через 3 секунды. Неважно, какое значение я настраиваю в te RestTemplate
, оно всегда возвращается через 3 секунды.
У кого-нибудь есть идея?