我是靠谱客的博主 时尚红酒,最近开发中收集的这篇文章主要介绍Feign、Sentinel和Hystrix源码解读,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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包中有一个配置类SentinelFeignAutoConfiguration,前提是Feign.Builder
没有被注册过,并且feign.sentinel.enabled 是被设置在配置文件中的;

@Bean @Scope("prototype")
@ConditionalOnMissingBean 
@ConditionalOnProperty(name = "feign.sentinel.enabled")
public Feign.Builder feignSentinelBuilder() {     
    return SentinelFeign.builder(); 
}


此处进行注入的;
在包spring-cloud-operfeign-core中,FeignClientsConfiguration类中,有一个HystrixFeignConfiguration类,配置使用HystrixFeign.Builder,但是此处需要引入hystrix的包才会被配置,代码如下:

@Configuration
@ConditionalOnClass({ HystrixCommand.class, HystrixFeign.class })
protected static class HystrixFeignConfiguration {

	@Bean
	@Scope("prototype")
	@ConditionalOnMissingBean
	@ConditionalOnProperty(name = "feign.hystrix.enabled")
	public Feign.Builder feignHystrixBuilder() {
		return HystrixFeign.builder();
	}

}


所以按照特定的条件就可以使用Sentinel或者hystrix。

总结:集成主要是两个方面:
1、是否加入相关配置(如:feign.sentinel.enabled)
2、是否引入相关包(Sentinel或者hystrix)

引申一个问题:
在Sentinel和hystrix都引入和配置的情况下,会采用哪个配置?
答案:优先使用Sentinel,原因:在HystrixTargeter中的target方法有一个逻辑:

if (!(feign instanceof feign.hystrix.HystrixFeign.Builder)) {
	return feign.target(target);
}


即当前的实例不是feign.hystrix.HystrixFeign.Builder,则采用其他。

 

最后

以上就是时尚红酒为你收集整理的Feign、Sentinel和Hystrix源码解读的全部内容,希望文章能够帮你解决Feign、Sentinel和Hystrix源码解读所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部