Тайм-аут чтения RestTemplate не работает - PullRequest
0 голосов
/ 11 мая 2018

У меня есть служба отдыха Springboot. Служба A вызывает службу отдыха 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, но все еще напрасно.

Что-то не так я делаю из-за чего не вижу ожидаемого?

1 Ответ

0 голосов
/ 11 мая 2018

Если вы используете весеннюю загрузку, вы можете попробовать:

@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);
...