首页 > 解决方案 > Spring restTemplate 超时而不抛出异常

问题描述

我在后端服务上发现了超时问题:SA。SA 使用 restTemplate 向 3party api 发送请求:

try {
   log.info("sending request to sb"); //position 1
   return restTemplate.postForObject("https://url.to.sb.com", null, String.class);
}catch(Exception ex) {
   log.error("request error", ex) //position 2
}

sb 服务正常工作。浏览器获取网关超时错误。打印位置 1 上的日志,但不打印位置 2。

这是我编写restTemplate的方式:

RestTemplate restTemplate = new RestTemplate();
HttpClientBuilder httpClientBuilder = HttpClients.custom();
httpClientBuilder.setSSLContext(xxxx);
CloseableHttpClient client = httpClientBuilder.build();
restTemplate.setInterceptors(Arrays.asList(new DefaultHttpRequestInterceptor()));
HttpComponentsClientHttpRequestFactory requestFactory = new 
HttpComponentsClientHttpRequestFactory(client);
restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(requestFactory));
return restTemplate;

为什么前端获取网关超时,但 SA 上没有错误日志?似乎该线程处于待处理状态。这个问题在重新启动 SA 后得到解决。但我还是想知道这个问题的可能原因,不确定它与requestFactory setTimeout有关

标签: springresthttpclientresttemplate

解决方案


推荐阅读