转载请注明出处:
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/
转载文章受原作者版权保护。转载请注明原作者出处!