本文已参与「新人创作礼」活动,一起开启掘金创作之路。
fallback降级机制
1、创建command
2、执行command
3、request cache
4、短路器如果被打开,启用fallback降级机制
触发fallback
hystrix调用各种接口,或者访问外部依赖,mysql,redis,zookeeper,kafka等等,出现异常的情况。
error:访问mysql报错,redis报错,zookeeper报错,kafka报错。
reject:对每个外部依赖,无论是服务接口,中间件,资源隔离,对外部依赖只能用一定量的资源去访问,线程池/信号量,资源池已满。
timeout:访问外部依赖的时候,访问时间过长,可能就会导致超时,报一个TimeoutException异常。
circuit breaker:如果短路器发现异常事件的占比达到了一定的比例,直接开启短路。
error、reject、timeout属于对外部依赖的东西访问的时候出现了异常,发送异常事件到短路器中去进行统计
circuit breaker直接调用fallback降级机制
fallback降级机制,为了避免外部依赖有故障。
比如,在内存中维护一个ehcache,作为一个纯内存的基于LRU自动清理的缓存,数据也可以放入缓存内,如果外部依赖有异常,fallback降级机制启用,直接尝试从ehcache中获取数据。
比如,从mysql,redis,或者其他任何地方去获取数据的,获取调用其他服务的接口的,结果依赖服务故障,fallback降级机制启用,可以返回一个默认值。
降级机制实现
内存数据
默认值
run()抛出异常,超时,线程池或信号量满了,或短路了,都会调用fallback机制。
HystrixCommand是实现getFallback方法
HystrixObservableCommand是实现resumeWithFallback方法
HystrixCommandProperties.Setter()
.withFallbackIsolationSemaphoreMaxConcurrentRequests(10)
这个参数设置了HystrixCommand.getFallback()最大允许的并发请求数量,默认值是10,是通过semaphore信号量的机制去限流,如果超出了这个最大值,直接被reject。