Hystrix 源码解读

转载请注明出处:

1.引入依赖:

2. 查看自动配置类HystrixCircuitBreakerConfiguration

查看 org.springframework.cloud.spring-cloud-starter-netflix-hystrix 包中的自动配置类,Hystrix 的断路器的自动配置类在 org.springframework.cloud.netflix.hystrix.HystrixCircuitBreakerConfiguration 类中

3.查看 HystrixCircuitBreakerConfiguration 类的实现

Hystrix 的熔断开启与实现时通过 上面中的 HystrixCommandAspect 类实现的

4.查看 HystrixCommandAspect 类的实现

该切面类中的实现为:

通过代码看出hystrix 通过封装一个切面,在切面中 拦截 对使用了 @HystrixCommand 与 @HystrixCollapser注解的方法进行增强;

重点看这行代码:

是如何创建HystrixCommand对象的。

分析的是HystrixCommand注解,所以走else里的分析。整体构造过程是 GenericCommand -> AbstractHystrixCommand -> HystrixCommand -> AbstractCommand, 构建GenericCommand的过程,我们主要还是看AbstractCommand的构造方法。

5.查看 切面方法实现细节

hystrix 执行的流程图:

6.核心实现

HystrixCommandAspect.methodsAnnotatedWithHystrixCommand 中的execute方法,execute 方法为 hystrix 实现的核心:

判断是否为同步,还是异步,还是观察着模式,异步方式是通过 Future 封装,用Future 对象的get方法,阻塞等待返回结果,以达到同步效果。

在这里只查看同步的方式: 调用链路是:HystrixCommand.execute() -> queue() -> toObservable()

1.是否使用缓存

如果开启缓存,请求首先会返回缓存中的结果。

2.是否开启熔断

当运行hystrix命令时,会判断是否熔断,如果已经熔断,hystrix将不会执行命令,而是直接执行fallback。等熔断关闭了,在执行命令。

熔断器关闭或打开的判断,

接着分析 this.circuitBreaker.allowRequest()

https://www.iocoder.cn/Hystrix/command-execute-mode/

Original: https://www.cnblogs.com/zjdxr-up/p/16339325.html
Author: 香吧香
Title: Hystrix 源码解读

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611479/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球