1月29日作业
- .跑通hystrix,resilienc4j,sentinel插件
- 比较3个熔断插件的不同点,输出源码解析与比较文章
- 总结
Demo
首先启动项目soul-admin以及soul-bootstrap,以soul-examples
中的soul-example-http
为例,注册到soul网关上。同时在soul-admin插件管理中心开启hystrix
插件
同时配置selector
以及相关的rule
,这里以http://localhost:9195/http/order/findById?id=2
为例,制定相应的熔断策略
设置这些规则以后,我们用superbenchmarker
进行压测
从soul网关控制台日志中可以看到以下日志,说明压测会触发hystrix
进行断路保护机制,
探究hystrix插件
hystrix插件和其他插件相同,都会执行 AbstractSoulPlugin 类的 execute() 方法,然后在HystrixPlugin
中覆写doExecute
方法,核心代码如下
为了更好的理解hystrix工作原理,这里附上官方文档flow chart
简单来讲,hystrix会将一个请求包装成一个 HystrixCommand 或者 HystrixObservableCommand 对象,然后执行Hystrix command,然后根据cache以及相应的隔离模式来进行fallback处理或者返回一个成功的response。值得注意的是,HystrixCommand执行的时候都会直接或间接的调用toObservable().toBlocking().toFuture()
,因此每个command都依赖于Observable
的实现。
在Hystrix插件中提供了一个Command
接口,并且根据Semaphore隔离模式和线程池隔离模式实现了两个不同的Command类: HystrixCommand
和HystrixCommandOnThread
。
在HystrixPlugin会根据soul-admin同步的数据创建HystrixHandle
对象,并通过fetchCommand()方法根据隔离模式来创建不同的command来执行。核心代码如下
总结
Hystrix插件的底层原理大概就是如上所述,如果想深究Hystrix的工作原理,可以参考官方文档: Hystrix: how it works. Soul网关里所做的就是把Hystrix依赖做了又一层的封装,让Hystrix插件化来体现热插拔的设计思想。稍后会对resilienc4j
以及sentinel
插件进行进一步解析。