从 SpringBoot 2.3升级至SpringBoot 2.7.x后,Feign的配置也发生了变化。本文主要记录Feign调用超时时间配置问题。
在解决问题前,也查阅过相关资料,可能查询的姿势有问题。一直没有找到正确答案;最终通过查看源码,找到了可以生效的配置。
本文解决方案仅供参考;如果各位有更好的方案,欢迎留言交流。
Spring Boot 2.7.13
Spring Cloud 2021.0.8
本人使用的是基于 https://start.spring.io/ 在线生成的代码。如果您使用的技术差异过大或没有使用Spring Boot 默认的Feign实现,本文对您解决问题可能没有太大帮助。
resilience4j:
timelimiter:
configs:
default:
timeoutDuration: 101s #示例101秒
主要是找到对应的配置,然后针对配置进行修改
进入 org.springframework.cloud.openfeign.FeignCircuitBreakerInvocationHandler#invoke
可以看到默认的超时时间是 1 秒。
根据信息继续查看Resilience4JCircuitBreakerConfiguration
,可以发现timeLimiterConfig
属性配置。只需要改变这个配置即可。
根据这个信息,继续查看Resilience4JConfigBuilder
类的build方法;
找到调用的方法:
可以看到TimeLimiterRegistry
接口,TimeLimiterConfig
配置就是通过这个接口获取的。
TimeLimiterRegistry
是通过Spring注入,直接找到它的默认实例。
从它的参数看,可以找到对应的属性配置
进入该配置,可以看到最终需要修改的属性:
resilience4j:
timelimiter:
configs:
default:
timeoutDuration: 101s