Feign调用超时时间配置不生效问题排查

文章针对 OpenFeign 3.0.6 调用超时时间配置不生效问题,检查 Ribbon 配置失效情况,后更换为 OpenFeign 配置并阐述监控方法。
环境说明
框架
版本
OpenFeign
3.0.6
loadbalancer
3.0.5
Spring Cloud
3.0.5
检查 Ribbon 配置
使用 Ribbon 配置了超时时间,但没有生效,配置如下:

json

ribbon: # 客户端读取超时时间,超时时间要小于Hystrix的超时时间,否则重试机制就无意义了 ReadTimeout: ${RIBBON_READ_TIMEOUT:3000000} # 客户端连接超时时间 ConnectTimeout: ${RIBBON_CONNECT_TIMEOUT:30000} # 访问实例失败(超时),允许自动重试,设置重试次数,失败后会更换实例访问,请一定确保接口的幂等性,否则重试可能导致数据异常。 OkToRetryOnAllOperations: true MaxAutoRetries: 1 MaxAutoRetriesNextServer: 1
JSON
使用 Arthas 查看线上服务 Feign 调用时的配置是否生效,可以监控 RetryableFeignBlockingLoadBalancerClient 的 execute 方法的第二个参数 Options,里面封装了 Feign 调用的超时时间设置
notion image
Watch 语句如下:

json

watch org.springframework.cloud.openfeign.loadbalancer.RetryableFeignBlockingLoadBalancerClient execute '{params}' -n 1 -x 3
JSON
notion image
通过以上监控可知,Feign 在调用时 Options 中配置的 ConnectTimeOut=10s,ReadTimeOut=60s,即为 Options 的默认值,Ribbon 配置没有生效

更换为 OpenFeign 配置

使用如下配置:

json

feign: # Feign客户端配置 client: config: # Feign客户端默认配置 default: # 连接超时 connectTimeout: ${FEIGN_CLIENT_CONFIG_DEFAULT_CONNECT_TIMEOUT:30000} # 读取超时 readTimeout: ${FEIGN_CLIENT_CONFIG_DEFAULT_READ_TIMEOUT:300000} # Feign日志级别:NONE/BASIC/HEADERS/FULL loggerLevel: ${FEIGN_CLIENT_CONFIG_DEFAULT_LOGGER_LEVEL:FULL}
JSON
配置完成后,可以通过 Arthas 查看是否生效
notion image
 
具体原因可以查看这篇文章
上一篇
OpenFeign源码分析
下一篇
Windows10家庭版安装Docker记录
Loading...
2024-11-11
最新发布
Spring事务资源解绑异常问题
2025-3-5
智能IDE与插件集成DeepSeek指南:开发者的高效编程新选择
2025-3-5
Account Note:一款解决网站账号管理烦恼的浏览器扩展
2025-3-5
ChatGPT与豆包的图像生成
2024-11-12
Windows10家庭版安装Docker记录
2024-11-12
Mybatis Log Parser插件
2024-11-11