Spring Cloud 2020: Hystrix不生效怪我咯

共 1353字,需浏览 3分钟

 ·

2021-03-20 10:36

好像没写相关的文章了,正好最近有朋友问我一些关于新版本中遇到的问题。

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 -


后台回复 学习资料 领取学习视频


如有收获,点个在看,诚挚感谢


浏览 54
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报