Spring Cloud 2020: Hystrix不生效怪我咯
好像没写相关的文章了,正好最近有朋友问我一些关于新版本中遇到的问题。
2020.0.1 这个版本是目前最新的版本,也是变动最大的一个版本。最大的变动莫过于将 Netflix OSS 的组件进行了移除操作。今天的问题也是跟这个有关系,大家通过标题就可以知道。
虽然移除了 Netflix 的组件,但是对于初学者来说,市面上大部分书籍或者文章都是老的版本,也都是用的 Netflix 里面的组件。在学习的时候自然的选择了最新的版本,但是没有仔细的去看官方文档,也不知道最新版已经进行了移除,在用的时候还是按照老版本的方式去使用这些组件,自然就有问题了。
问题背景
服务调用使用 Feign,也加了 Hystrix 的配置和依赖,也写了回退的逻辑。把服务提供方下线,调用接口,但是没有走回退逻辑,证明 Hystrix 没生效。
开启 Feign 对 Hystrix 支持的配置如下:
feign.hystrix.enabled=true
如果没有生效,最好的方式就是通过源码来查找问题,首先就得看 Feign 的自动装配代码,类是 FeignAutoConfiguration。
然后你会发现已经找不到 feign.hystrix.enabled 了,对应新的控制装配的是 feign.circuitbreaker.enabled。
所以不生效的第一个原因就是配置错了,需要改成下面的才行:
feign.circuitbreaker.enabled=true
改完之后还是不行,没办法了,我要了一份代码,看了下新版本中对于熔断这块统一在 commons 中抽象了 CircuitBreaker 接口。但是找不到实现类,也就是说 Hystrix 有问题,要么就依赖错了,要么就是版本低了,无法适配。
当前用的版本是 2.1.6.RELEASE。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
然后去 mvnrepository 中看了下,换了一个新版本 2.2.6,就可以找到对应的 CircuitBreaker 实现类了。
做完这两步后,Hystrix 回退的逻辑生效了。
本文主要还是分享解决问题的思路,希望大家有收获。
关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud 微服务-全栈技术与案例解析》, 《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号猿天地发起人。
- END -后台回复 学习资料 领取学习视频
如有收获,点个在看,诚挚感谢