Feign是如何集成Sentinel和Hystrix的?
通过代码解读进行剖析。
Spring初始化过程之Feign集成Sentinel与hystrix组件的解读
1、BeanDefinition过程
EnableFeignClients->FeignClientsRegistrar->FeignClientFactoryBean;
2、 DI过程,依赖注入,初始化FeignClientFactoryBean,方法流程;
FeignClientFactoryBean::getObject->getTarget->feign方法->get方法;
get方法是从现有的Spring容器中找到已经加载的Feign.Builder,并且进行实例化。
Feign.Builder是什么时候加载到Spring容器的,也就是决定使用SentinelFeign.Builder还是HystrixFeign.Builder,此处是关键。
在包spring-cloud-operfeign-core中
默认情况下,使用FeignClientsConfiguration中注册的Feign.Builder;此处进行的声明
@Bean
@Scope("prototype")
@ConditionalOnMissingBean
public Feign.Builder feignBuilder(Retryer retryer) {
return Feign.builder().retryer(retryer);
}
在spring-cloud-starter-alibaba-sentinel包中有一个配置类SentinelFeignAutoConfigu