当前位置:网站首页>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请求的发送,而不是真正的客户端类。
边栏推荐
- Why do you need foreign keys?
- 正向预查和反向预查
- 592. 分数加减运算 : 表达式计算入门题
- Delay queue performance test
- SSM practical project - front back separation (easy to understand)
- heap
- Plus版SBOM:流水线物料清单PBOM
- BSP video tutorial issue 21: easy one key implementation of serial port DMA variable length transceiver, support bare metal and RTOS, including MDK and IAR, which is more convenient than stm32cubemx (
- js真伪数组转换
- String to realize fuzzy query
猜你喜欢
QT | qcheckbox of control

C program debugging and exception handling (try catch)

Zhongke Lanxun fell 30% on the first day of listing: Huang Zhiqiang, 60, started a company with a market value of 7.7 billion

Overview of static inner classes and non static inner classes

Openpyxl drawing area map

Overview of famous inner classes and anonymous inner classes

BSP video tutorial issue 21: easy one key implementation of serial port DMA variable length transceiver, support bare metal and RTOS, including MDK and IAR, which is more convenient than stm32cubemx (

Xposed+FDex2 app脱壳 (黑猫投诉app脱壳)

MySQL扩展

Distributed system architecture theory and components
随机推荐
Gartner 权威预测未来4年网络安全的8大发展趋势
正向预查和反向预查
POJ2594 Treasure Exploration【二分图最小路径覆盖】【Floyd】
字节跳动的 Flink OLAP 作业调度和查询执行优化实践
V. introduction of other objectives and general options
Detail the execution process of JDBC query method
Finally, I was ranked first in the content ranking in the professional field. I haven't been tired in vain during this period. Thanks to CSDN's official platform, I'm lucky and bitter.
POJ1548 Robots【二分图最小路径覆盖】
C program debugging and exception handling (try catch)
Lambda expression
JS true / false array conversion
如何获取Class类对象
Overview of static inner classes and non static inner classes
POJ2446 Chessboard【二分图最大匹配】
Aike AI frontier promotion (7.27)
Uniapp video video playback is not completed. It is forbidden to drag the progress bar fast forward
PG synchronizes multiple data tables to MySQL. Is there a way to simplify the configuration?
[Nuxt 3] (十二) 项目目录结构 2
SSM practical project - front back separation (easy to understand)
正则表达式去除两端空格