Springboot RestTemplate设置超时时间的简单方法
作者:75888丶 时间:2022-06-12 23:40:24
RestTemplate未设置超时时间,导致RabbitMQ队列大量堆积,消费者假死,不进行消费,类似线程堵塞。
排查:
从日志排查问题,在从进入消费者到结束期间,会调用业务服务,然而通过开始时间至结束时间,花费的时间竟然高达100多秒,查看业务服务未发现异常。出现这种问题的原因也有可能在消费期间网络波动导致HTTP连接出现问题,一直处于等待状态。由此判断可能是HTTP超时时间未设置导致的问题。
本文生产环境Springboot版本 2.1.5.RELEASE,采用的是Java config配置
Java Config配置
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate getRestTemplate() {
//配置HTTP超时时间
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectionRequestTimeout(6000);
httpRequestFactory.setConnectTimeout(6000);
httpRequestFactory.setReadTimeout(6000);
return new RestTemplate(httpRequestFactory);
}
}
配置文件指定
custom.rest.connection.connection-request-timeout=3000
custom.rest.connection.connect-timeout=3000
custom.rest.connection.read-timeout=3000
@Configuration
public class AppConfig{
@Bean
@ConfigurationProperties(prefix = "custom.rest.connection")
public HttpComponentsClientHttpRequestFactory customHttpRequestFactory() {
return new HttpComponentsClientHttpRequestFactory();
}
@Bean
public RestTemplate customRestTemplate(){
return new RestTemplate(customHttpRequestFactory());
}
}
重新部署后消费者迅速开始消费,堆积的消息已经消费完。
RestTemplate 设置超时时间注意点
1、保证系统中只有一个RestTemplate的配置;不然可能与你的预期不一致。
2、永远不要太相信自己写的代码;多打印日志才能真正知道调用时间;
long s = System.currentTimeMillis();
try {
responseEntity = restTemplate.exchange();
} catch (Exception e) {
long costTime = System.currentTimeMillis()-s;
log.error("调用**服务异常,花费时间:{},错误:{}",costTime, e.getMessage(), e);
}
来源:https://blog.csdn.net/a909422229/article/details/115372266
标签:springboot,resttemplate,超时
0
投稿
猜你喜欢
深入JAVA对象深度克隆的详解
2022-01-05 14:03:13
AndroidStudio Gradle基于友盟的多渠道打包方法
2022-02-24 22:04:43
SpringBoot导入Druid运行失败问题
2023-02-14 03:35:41
SpringBoot如何实现分离资源文件并打包
2023-02-18 12:01:49
Spring中AOP概念与两种动态代理模式原理详解
2023-04-13 01:21:54
C#串口通信模块使用方法示例
2023-06-19 12:13:57
java实现鲜花销售系统
2023-08-29 20:23:42
浅析Spring工厂的反射和配置文件
2023-06-22 20:52:23
时间处理函数工具分享(时间戳计算)
2021-07-24 05:06:18
基于java Files类和Paths类的用法(详解)
2021-08-11 11:22:55
java常用工具类之DES和Base64加密解密类
2023-12-20 17:48:31
spring boot实战教程之shiro session过期时间详解
2023-01-05 01:37:47
解决Java执行Cmd命令出现的死锁问题
2023-06-15 09:54:56
解决Java API不能远程访问HBase的问题
2023-11-27 04:17:48
springmvc实现简单的拦截器
2022-02-27 05:13:39
C#中ref关键字的用法
2022-07-17 21:30:47
java长整除问题浅谈
2023-05-22 06:06:23
java使用Filter实现自动登录的方法
2022-09-09 15:46:47
IDEA类存在但找不到的解决办法
2021-10-22 07:24:43
Kotlin中常见内联扩展函数的使用方法教程
2023-07-04 13:46:12