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

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

    • 前言
    • 使用的技术
    • 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 秒。
【笔记】SpringBoot 2.7.x Feign超时时间配置问题_第1张图片
根据信息继续查看Resilience4JCircuitBreakerConfiguration,可以发现timeLimiterConfig属性配置。只需要改变这个配置即可。

根据这个信息,继续查看Resilience4JConfigBuilder类的build方法;
【笔记】SpringBoot 2.7.x Feign超时时间配置问题_第2张图片
找到调用的方法:
【笔记】SpringBoot 2.7.x Feign超时时间配置问题_第3张图片
可以看到TimeLimiterRegistry接口,TimeLimiterConfig配置就是通过这个接口获取的。

TimeLimiterRegistry是通过Spring注入,直接找到它的默认实例。
【笔记】SpringBoot 2.7.x Feign超时时间配置问题_第4张图片从它的参数看,可以找到对应的属性配置
【笔记】SpringBoot 2.7.x Feign超时时间配置问题_第5张图片
进入该配置,可以看到最终需要修改的属性:
【笔记】SpringBoot 2.7.x Feign超时时间配置问题_第6张图片【笔记】SpringBoot 2.7.x Feign超时时间配置问题_第7张图片

然后查看对应的yml配置:
【笔记】SpringBoot 2.7.x Feign超时时间配置问题_第8张图片
最终的yml配置:

resilience4j:
  timelimiter:
    configs:
      default:
        timeoutDuration: 101s

你可能感兴趣的:(笔记,spring,boot)