聊聊Hystrix的源码

今天我们说一下Hystrix的源码的内容

@EnableCircuitBreaker注解

需要使用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配置类

我们看一下自动装配的HystrixCircuitBreakerConfiguration类:

@Bean
public HystrixCommandAspect hystrixCommandAspect() {
    return new HystrixCommandAspect();
}

类中定义了HystrixCommandAspect面向切面编程和RxJava响应式编程,了解了Hystrix的源码内容对我们以后分析服务的熔断是有邦之的。,这是一个切面类,类中定义了注解@HystrixCommand的方法的切入点,methodsAnnotatedWithHystrixCommand()方法是对注解@HystrixCommand修饰的方法的增强

  1. 首先会对@HystrixCommand的配置信息进行读取,封装到MetaHolder中,
  2. 使用元数据MetaHolder创建的可执行器对象GenericCommand,GenericCommand的父类AbstractCommand的构造方法定义了线程池、熔断器等属性,线程池是使用

ConcurrentHashMap集合的HystrixThreadPool,GenericCommand中重写了run()方法和getFallback()方法,run()中是对原始方法的调用,而getFallback()方法中是对回退方法的调用

  1. 根据元数据MetaHolder中的信息获取执行方式,有同步异步和响应式方式,一般是同步
  2. 然后调用CommandExecutor.execute()方法进行执行,先是调用castToExecutable()把 GenericCommand转为HystrixExecutable的实例,然后调用HystrixExecutable的execute()方法,这里返回是Future对象,也就是异步处理的结果,涉及到响应式编程RxJava,它会调用GenericCommand中重写的run()方法和getFallback()方法

总结

这篇文章主要介绍了Hystrix是怎么进行初始化的话,主要利用了SpringBoot的自动配置和Aspect面向切面编程和RxJava响应式编程,了解了Hystrix的源码内容对我们以后分析服务的熔断等功能是有帮助的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值