SpringCloud - Hystrix 源码

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

其他的,比如熔断器开启,线程池,信号量都满了,则会走到降级方法
SpringCloud - Hystrix 源码
这里也是会反射调用到 fallback 方法,fallback 降级方法也是有信号量和线程池的大小控制 的,也就是信号量或线程池是多少大小,fallback 降级方法也会接收多少降级的请求。