当前位置:网站首页>feign client三个客户端的自动装配
feign client三个客户端的自动装配
2022-07-27 12:46:00 【华为云】
feign client三个客户端的自动装配
我们在之前的文章中说了Feign的客户端有httpclient,OkHttpClient,Client.Default,下面就这三个客户端的自动装配进行分析一下。
FeignRibbonClientAutoConfiguration
FeignRibbonClientAutoConfiguration这个类配置FeignClient,从它的命名我们就可以看出来,它是具有负载均衡能力,可见关于类的命名见名知意是多么重要。
@ConditionalOnClass({ ILoadBalancer.class, Feign.class })@Configuration@AutoConfigureBefore(FeignAutoConfiguration.class)@EnableConfigurationProperties({ FeignHttpClientProperties.class })@Import({ HttpClientFeignLoadBalancedConfiguration.class, OkHttpFeignLoadBalancedConfiguration.class, DefaultFeignLoadBalancedConfiguration.class })public class FeignRibbonClientAutoConfiguration { @Bean @Primary @ConditionalOnMissingBean @ConditionalOnMissingClass("org.springframework.retry.support.RetryTemplate") public CachingSpringLoadBalancerFactory cachingLBClientFactory( SpringClientFactory factory) { return new CachingSpringLoadBalancerFactory(factory); } @Bean @Primary @ConditionalOnMissingBean @ConditionalOnClass(name = "org.springframework.retry.support.RetryTemplate") public CachingSpringLoadBalancerFactory retryabeCachingLBClientFactory( SpringClientFactory factory, LoadBalancedRetryFactory retryFactory) { return new CachingSpringLoadBalancerFactory(factory, retryFactory); } @Bean @ConditionalOnMissingBean public Request.Options feignRequestOptions() { return LoadBalancerFeignClient.DEFAULT_OPTIONS; }}当ILoadBalancer类和Feign类存在的时候,FeignRibbonClientAutoConfiguration可以自动配置,同时导入HttpClientFeignLoadBalancedConfiguration、OkHttpFeignLoadBalancedConfiguration、DefaultFeignLoadBalancedConfiguration三个客户端的负载均衡配置类
HttpClientFeignLoadBalancedConfiguration
从HttpClientFeignLoadBalancedConfiguration这个类是对HttpClient的自动装配的配置类,类上的注解我们可以看到
@Configuration@ConditionalOnClass(ApacheHttpClient.class)@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true)class HttpClientFeignLoadBalancedConfiguration {}在存在ApacheHttpClient类和feign.httpclient.enabled=true可以实现httpclient的自动装配
DefaultFeignLoadBalancedConfiguration
这个类的定义:
@Configurationclass DefaultFeignLoadBalancedConfiguration { @Bean @ConditionalOnMissingBean public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory, SpringClientFactory clientFactory) { return new LoadBalancerFeignClient(new Client.Default(null, null), cachingFactory, clientFactory); }}从源码中我们可以看到默认自动装配是这个,从Client.Default看出实例使用HttpURLConnection来发起远程调用请求。
OkHttpFeignLoadBalancedConfiguration
这个类加载的条件:
@Configuration@ConditionalOnClass(OkHttpClient.class)@ConditionalOnProperty(value = "feign.okhttp.enabled")class OkHttpFeignLoadBalancedConfiguration {}通过OkHttpFeignLoadBalancedConfiguration类上的注解,可以看到需要满足的条件的是存在OkHttpClient类,并且feign.okhttp.enabled=true,这样自动装配才会生效,实例内部通过OKHttp3完成http请求。
总结
本篇文章主要对Feign的三个客户端的自动配置类进行了源码层面的分析,对应的类的自动装配类分别是OkHttpFeignLoadBalancedConfiguration、DefaultFeignLoadBalancedConfiguration、HttpClientFeignLoadBalancedConfiguration,根据自动装配类的类上的注解,我们可以看出要想让哪个自动装配类生效,需要我们配置的条件是什么,以及需要引入的包有哪些,除了这个三个客户端外还有一个客户端是LoadBalancerFeignClient,它的内部是通过ribbon的负载均衡调度各个客户端完成Http请求的发送,而不是真正的客户端类。
边栏推荐
- Firefox 103 发布,更快、更安全
- HDU1698_ Just a Hook
- 正则表达式去除两端空格
- 视频游戏沉迷行为研究综述
- flinksql从Oracle同步数据到Doris,一共50几个字段,Oracle表中3000多万条
- 改变线程状态的方法
- Mixin\ plug in \scoped style
- SQL question brushing: find out the current salary of all employees
- Optimization Practice of Flink OLAP job scheduling and query execution based on ByteDance
- JS true / false array conversion
猜你喜欢

Enjoy the luxury meta universe louis:the game, and participate in the NFT series digital collection white roll activity | tutorial

「游戏引擎 浅入浅出」4.1 Unity Shader和OpenGL Shader

Top 10 international NFT exchanges

文章复现:SRCNN

堆

Will causal learning open the next generation of AI? Chapter 9 Yunji datacanvas officially released the open source project of ylarn causal learning

A survey of video game addictive behavior research

Dominoes staged: the beginning and end of the three arrow capital crash

字节跳动的 Flink OLAP 作业调度和查询执行优化实践

概述有名内部类与匿名内部类
随机推荐
「游戏引擎 浅入浅出」4.1 Unity Shader和OpenGL Shader
flinksql从Oracle同步数据到Doris,一共50几个字段,Oracle表中3000多万条
Gartner authority predicts eight development trends of network security in the next four years
Overview of static inner classes and non static inner classes
【萌新解题】斐波那契数列
JS single thread understanding notes - Original
Detail throw and throws
Keil mdk5.37 and above can add AC5 (armcc) compiler by themselves
事务四大特性(ACID):
An overview of kernel compilation system
A survey of video game addictive behavior research
Will MySQL fail to insert data? Why?
SSM实战项目-前后分离(简单易懂)
Optimization Practice of Flink OLAP job scheduling and query execution based on ByteDance
Do you really understand CMS garbage collector?
程序员培训学习后好找工作吗
redis分布式在线安装
Openpyxl drawing radar map
Set interface
Seata's landing practice in ant International Banking