SpringCloud - Hystrix 源码
SPI 加载 EnableCircuitBreaker 类型的类
创建 hystrixCommand 注解的切面类
同步调用
熔断器判断是否允许请求
判断请求数和失败率是否达标,如果都达标就开启熔断器
当当前时间超过了时间窗口则允许一次请求
如果是采用的信号量隔离级别
如果全局变量 count 大于配置的最大请求数,则返回 false,不让请求走降级
如果是线程池隔离级别,则这个 tryAcquire 方法就会返回 true
这里一切都合格,则 hystrix 就判断可以调用后端服务接口,则会反射调用被代理方法
这个钩子返回会掉到
接下来就是反射调用了
线程池的创建及超时控制
这里创建了线程
其他的,比如熔断器开启,线程池,信号量都满了,则会走到降级方法
这里也是会反射调用到 fallback 方法,fallback 降级方法也是有信号量和线程池的大小控制 的,也就是信号量或线程池是多少大小,fallback 降级方法也会接收多少降级的请求。