今天我们说一下Hystrix的源码的内容
需要使用Hystrix 的时候,需要我们通过@EnableCircuitBreaker来开启断路器,那么我们看一下这个注解:
- @Target(ElementType.TYPE)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Inherited
- @Import(EnableCircuitBreakerImportSelector.class)
- public @interface EnableCircuitBreaker {
-
- }
注解中导入了EnableCircuitBreakerImportSelector类,EnableCircuitBreakerImportSelector继承SpringFactoryImportSelector,它的isEnabled()方获取spring.cloud.circuit.breaker.enabled的配置默认是true
SpringFactoryImportSelector的annotationClass属性根据构造方法可以知道
annotationClass是获取子类中的注解,也就是EnableCircuitBreaker注解,在它的selectImports()方法中通过SpringFactoriesLoader的loadFactoryNames()方法加载META-INF/spring.factories文件下的EnableCircuitBreaker对应的类HystrixCircuitBreakerConfiguration
- org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker=\
- org.springframework.cloud.netflix.hystrix.HystrixCircuitBreakerConfiguration
我们看一下自动装配的HystrixCircuitBreakerConfiguration类:
- @Bean
- public HystrixCommandAspect hystrixCommandAspect() {
- return new HystrixCommandAspect();
- }
类中定义了HystrixCommandAspect面向切面编程和RxJava响应式编程,了解了Hystrix的源码内容对我们以后分析服务的熔断是有邦之的。,这是一个切面类,类中定义了注解@HystrixCommand的方法的切入点,methodsAnnotatedWithHystrixCommand()方法是对注解@HystrixCommand修饰的方法的增强
ConcurrentHashMap集合的HystrixThreadPool,GenericCommand中重写了run()方法和getFallback()方法,run()中是对原始方法的调用,而getFallback()方法中是对回退方法的调用
这篇文章主要介绍了Hystrix是怎么进行初始化的话,主要利用了SpringBoot的自动配置和Aspect面向切面编程和RxJava响应式编程,了解了Hystrix的源码内容对我们以后分析服务的熔断等功能是有帮助的。