0
点赞
收藏
分享

微信扫一扫

Hystrix(一):为什么@EnableCircuitBreaker和@HystrixCommand能驱动Hystrix

素的盐 2023-04-03 阅读 55

一、@EnableCircuitBreaker

EnableCircuitBreaker源码如下:

Hystrix(一):为什么@EnableCircuitBreaker和@HystrixCommand能驱动Hystrix_springcloud

从源码看出实例化了@EnableCircuitBreaker注解实例化了EnableCircuitBreakerImportSelector这个类。

再来看EnableCircuitBreakerImportSelector源码:

Hystrix(一):为什么@EnableCircuitBreaker和@HystrixCommand能驱动Hystrix_Hystrix_02

EnableCircuitBreakerImportSelector继承了SpringFactoryImportSelector,SpringFactoryImportSelector的selectImports方法会被springboot自动调用(SpringFactoriesLoader机制),这个selectImports方法会调用上面截图里的isEnabled方法,从而加载spring.fatories文件里的spring.cloud.circuit.breaker.enabled属性对应的类实例,也就是HystrixCircuitBreakerConfiguration的实例。


二、HystrixCircuitBreakerConfiguration

HystrixCircuitBreakerConfiguration实例化了HystrixCommandAspect类并注入容器。

HystrixCommandAspect源码如下:

Hystrix(一):为什么@EnableCircuitBreaker和@HystrixCommand能驱动Hystrix_springcloud_03

从HystrixCommandAspect源码中可以看出这是一个AspectJ切面,在编译期间就会生成被@HystrixCommand注解的方法的代理。估计代理方法包含了缓存、断路器、请求合并等Hystrix流程,具体流程不再展开,以后再讲。


举报

相关推荐

0 条评论