gpt4 book ai didi

spring - RestTemplate 读取超时不起作用

转载 作者:行者123 更新时间:2023-12-05 06:34:25 27 4
gpt4 key购买 nike

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

@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 都置于 Debug模式并在 B 的断点处等待超过 2 秒时,我除了在 A 中调用 restTemplate 以检测 2 秒的超时并立即进入异常 block 但是它没有。我还在 B 中放了一个 thread.sleep(5000) 但仍然没有用。

我做错了什么导致我没有看到预期的结果吗?

最佳答案

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

@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder)
{
return restTemplateBuilder
.setConnectTimeout(...)
.setReadTimeout(...)
.build();
}

如果那不行,那么在您当前的代码中,尝试在 创建 restTemplate 之前设置 requestFactory 上的所有 Prop ,或者通过摆脱 CloseableHTTPClient 来测试一次,例如:

HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectionRequestTimeout(...);
httpRequestFactory.setConnectTimeout(...);
httpRequestFactory.setReadTimeout(...);
return new RestTemplate(httpRequestFactory);

关于spring - RestTemplate 读取超时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50285428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com