【问题标题】:RestTemplate read timeout doesn't workRestTemplate 读取超时不起作用
【发布时间】:2018-10-21 11:08:11
【问题描述】:

我有一个 springboot 休息服务 A 使用 restTemplate 调用休息服务 B。 Rest 服务 A 的 restTemplate bean 创建如下,超时设置如下面的代码 sn-p 所示。

@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 秒时,我除了在 A 中调用 restTemplate 来检测 2 秒的超时并立即进入异常块但是它没有。我还在 B 中放了一个 thread.sleep(5000) 但仍然是徒劳的。

我做错了什么,因为我没有看到预期的结果吗?

【问题讨论】:

  • 您好,您知道这是什么原因吗?我也面临同样的情况

标签: spring spring-boot resttemplate


【解决方案1】:

如果你使用的是spring boot,那么你可以试试:

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

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2012-11-29
    相关资源
    最近更新 更多