Таймаут чтения RestTemplate не работает

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

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

2
0
1 926
1

Ответы 1

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

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

Другие вопросы по теме