Spring Cloud OpenFeign 3.0.1 配置fallback后异常场景未触发求助
Spring Cloud OpenFeign 3.0.1 降级逻辑不生效排查方案
- 第一步:补全Resilience4j 依赖
Spring Cloud 3.0.x 对应 2020.0.x(Ilford)版本,官方已经移除Hystrix默认支持,开启feign.circuitbreaker.enabled=true后必须引入Resilience4j相关依赖才能触发降级逻辑,需要在pom中添加以下依赖:
<!-- Resilience4j 熔断器 starter --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId> </dependency> <!-- AOP 依赖,Resilience4j 切面逻辑必须依赖该组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
如果使用Gradle,对应添加以上两个依赖即可。
第二步:检查Fallback实现类的扫描逻辑
你已为FallbackTest添加了@Component注解,需要确认该类所在的包路径在Spring项目的@ComponentScan扫描范围内,可在FallbackTest的无参构造方法中打印启动日志,确认类被Spring容器正常实例化。第三步:可选配置(异常排查用)
如果补全依赖后依然不生效,可以替换为fallbackFactory实现,打印触发降级的异常信息方便定位问题:
@FeignClient(name = "feignClientTest", url = "invalid.url", fallbackFactory = FeignClientTest.FallbackFactoryTest.class) public interface FeignClientTest { @RequestMapping(method = RequestMethod.GET, value = "/fake/url") String getFromFakeUrl(); @Component class FallbackFactoryTest implements FallbackFactory<FeignClientTest> { private final Logger log = LoggerFactory.getLogger(this.getClass()); @Override public FeignClientTest create(Throwable cause) { // 此处会打印触发降级的具体异常信息 log.error("Feign 调用触发降级", cause); return () -> "Fallback"; } } }
注意:如果需要兼容旧版Hystrix实现,除了引入Hystrix相关依赖外,还需要额外添加配置
feign.hystrix.enabled=true,不过3.x版本已废弃该配置,不推荐继续使用Hystrix。
内容的提问来源于stack exchange,提问作者user2754805
相关产品推荐
相关产品推荐

