Hystrix原理图
2021-12-12 16:00:51 0 举报
Hystrix原理图
作者其他创作
大纲/内容
更新状态为CLOSE
circuitBreakerRequestVolumeThreshold
HystrixTargeter用来创建FeignClient
创建对应的HystrixCommand
返回包含正常逻辑的Observable
方法的代理处理器SynchronousMethodHandler
参数
方法Method
执行回调Action1markEmits
true
回调内部的执行逻辑
允许
代理的Future
Controller
创建HystrixFeign.Builder
判断线程是否执行完毕
隔离策略
HystrixCommand
HystrixCommand#execute()同步执行
结束
为这个Observable注册订阅HystrixContextScheduler
false
线程池HystrixThreadPoolDefault
是否异常
feign
isDone()
打开断路器
服务A独立的Spring上下文
onNext回调
有新的统计信息就会回调这个方法
开启缓存
每个@FeignClient注解修饰的接口都创建独立的处理器
get()阻塞获取结果
更新状态为OPEN
FeignClient接口
满了
lift
请求
使用信号量隔离
执行executeCommandWithSpecifiedIsolation获取Observable
Observable.defer(...).doOnTerminate(...).doOnUnsubscribe(...).subscribeOn(...) .doOnNext(...).doOnCompleted(...).onErrorResumeNext(...).doOnEach(...) .doOnError(...).doOnTerminate(...).doOnUnsubscribe(...);
实际的Future
返回代理的Future
抛出HystrixTimeoutException
创建Setter初始化每个HystrixCommand
抛出异常
FeignClientsConfiguration
executeCommandAndObserve创建hystrixObservable
TimedOutStatus状态
返回fallback的Observable
Hystrix相关组件注入Feign的扩展点
创建一个叫做execution的Observable调用Observable#defer
状态为NOT_EXECUTED
FeignClientFactoryBean创建Feign.Builder
项目启动
断路器尝试执行
默认每秒执行1次
被代理
父类AbstractCommand的构造函数创建
spring
FeignAutoConfiguration
feign.hystrix.enabled
其他异常
是
toBlocking().toFuture()
信号量的隔离逻辑在上层实现
HystrixDelegatingContract解析Hystrix注解
true如果是线程池隔离,就永远是true
HystrixInvocationHandler代理HystrixCommand
HystrixInvocationHandler动态代理
没满
外部
创建一个Observable
applyHystrixSemantics创建hystrixObservable
HystrixObservableTimeoutOperator定时检查是否超时
关闭断路器
默认的Feign创建流程
hystrix
Worker执行schedule调度
不允许
执行某个方法
超时异常执行异常
队列满了
阻塞获取
toObservable创建Observable
SetterFactorySetter工厂
ribbon
@EnableFeignClient指定扫描包路径
错误请求超过50%
返回带有缓存的Observable
装饰器模式
请求数量超过20
抛出RejectedExecutionException
spring cloud feign
否
submit到线程池去执行
使用线程池隔离
断路器HystrixCircuitBreakerImpl
信号量tryAcquire
默认执行execute()
设置TimedOutStatus状态为TIMED_OUT
future.cancel()中断实际Future的线程
HystrixCommand#queue()异步执行
0 条评论
下一页