【笔记】SpringBoot 2.7.x Feign超时时间配置问题

在升级SpringBoot至2.7.x后,Feign的超时配置有所变化。通过查看源码,发现在Resilience4j的timelimiter配置中,默认超时时间为1秒。解决方法是修改Resilience4JConfigBuilder中的timeLimiterConfig,具体配置为`resilience4j.timelimiter.configs.default.timeoutDuration`,例如设置为101秒。文章提供了一种参考解决方案,并邀请读者分享更好的方法。
摘要由CSDN通过智能技术生成

【笔记】SpringBoot 2.7.x Feign超时时间配置问题

前言

从 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实现,本文对您解决问题可能没有太大帮助。

Feign超时配置

resilience4j:
  timelimiter:
    configs:
      default:
        timeoutDuration: 101s #示例101秒

处理过程

主要是找到对应的配置,然后针对配置进行修改

进入 org.springframework.cloud.openfeign.FeignCircuitBreakerInvocationHandler#invoke
可以看到默认的超时时间是 1 秒。
在这里插入图片描述
根据信息继续查看Resilience4JCircuitBreakerConfiguration,可以发现timeLimiterConfig属性配置。只需要改变这个配置即可。

根据这个信息,继续查看Resilience4JConfigBuilder类的build方法;
在这里插入图片描述
找到调用的方法:
在这里插入图片描述
可以看到TimeLimiterRegistry接口,TimeLimiterConfig配置就是通过这个接口获取的。

TimeLimiterRegistry是通过Spring注入,直接找到它的默认实例。
在这里插入图片描述从它的参数看,可以找到对应的属性配置
在这里插入图片描述
进入该配置,可以看到最终需要修改的属性:
在这里插入图片描述在这里插入图片描述

然后查看对应的yml配置:
在这里插入图片描述
最终的yml配置:

resilience4j:
  timelimiter:
    configs:
      default:
        timeoutDuration: 101s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值