У меня есть служба отдыха Springboot, вызывающая службу B с использованием restTemplate. Компонент restTemplate службы отдыха A создается следующим образом с настройками тайм-аута, как показано в фрагменте кода ниже.
@Bean
RestTemplate getRestTemplate()
{
CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(closeableHttpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
requestFactory.setConnectTimeout( 2000 );
requestFactory.setReadTimeout( 2000 );
return restTemplate;
}
A вызывает B следующим образом:
try{
restTemplate.postForEntity(urlSvcB, httpEntity, myObject.class);
}
catch (Exception ex){
.....some code here.....
}
Когда я помещаю A и B в режим bebug и жду в точке останова в B более 2 секунд, я за исключением вызова restTemplate в A, чтобы определить тайм-аут в 2 секунды и сразу перейти к блоку исключений, НО это не . Я также поместил thread.sleep (5000) в B, но все равно напрасно.
Я делаю что-то не так, из-за чего не вижу ожидаемого?
Если вы используете весеннюю загрузку, вы можете попробовать:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder)
{
return restTemplateBuilder
.setConnectTimeout(...)
.setReadTimeout(...)
.build();
}
Если это не нормально, то в вашем текущем коде попробуйте установить все реквизиты на requestFactory перед, создав тест restTemplate ИЛИ один раз, избавившись от CloseableHTTPClient, например:
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectionRequestTimeout(...);
httpRequestFactory.setConnectTimeout(...);
httpRequestFactory.setReadTimeout(...);
return new RestTemplate(httpRequestFactory);