做熔断,可通过继承HystrixCommand重写run方法实现或者使用HystrixCommand注解进行实现,指定熔断失败的fallback方法。
默认10秒请求数超过20个,50%以上失败触发熔断,执行getFallback方法。每五秒尝试试探,成功的话关闭熔断
熔断相关配置:circuitBreaker.enabled默认true,circuitBreaker.requestVolumeThreshold 默认20
熔断状态:开启,关闭,半开启。内部在熔断器中心有个Metric模块。对当前接口数据流进行了订阅,当数据流产生变化,触发onnext函数回调,内部保存了hc变量(前十秒接口请求总数、失败数,失败率),满足熔断条件触发熔断状态变更,更新熔断时间戳等。
执行逻辑有两种模式:
1:信号量模式:当前线程接受请求执行下游逻辑,都在一个线程处理,设置execution.isolation.semaphore.maxConcurrentRequests设置最大并发数。超过的情况下进行降级处理。(内部通过计数器实现)
线程池模式(默认方式):下游依赖服务单独放入线程池,不同依赖线程池隔离开,相互之间不影响
通过限流信号量设置阈值方式,保证并发量情况下降级处理。
大致流程:
1.一个请求命令到来,首先判断是否存在缓存数据,存在返回
2.熔断器是否开启,是的话直接调用fallback。否则判断线程池是否已满,满的话fallback,上报拒绝
3.正常的话执行run方法,超时或者一场进行超时或者失败上报,执行fallback,执行成功的话返回结果,上报成功