当前位置:网站首页>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请求的发送,而不是真正的客户端类。
边栏推荐
- 关于 CMS 垃圾回收器,你真的懂了吗?
- Basic architecture of data Lake
- What are metauniverse and NFT digital collections?
- 分布式系统架构理论与组件
- 改变线程状态的方法
- 隔离级别
- How can the top 500 enterprises improve their R & D efficiency? Let's see what industry experts say!
- Nodejs body parser middleware processes post form data of type multipart / form data, and req.body cannot receive data
- Seata 在蚂蚁国际银行业务的落地实践
- II. Analysis of the execution process of make menuconfig
猜你喜欢

分布式系统架构理论与组件

SQL question brushing: find out the current salary of all employees

Self built personalized automatic quotation system to cope with changeable quotation mode

Aike AI frontier promotion (7.27)

Open source project - taier1.2 release, new workflow, tenant binding simplification and other functions

GAN:生成对抗网络 Generative Adversarial Networks

CVPR22 | 关系意识的图神经架构搜索

Detail try catch finally

Map接口

Overview of static inner classes and non static inner classes
随机推荐
JVM memory layout detailed, illustrated, well written!
Baoli food listed on Shanghai Stock Exchange: annual revenue of 1.578 billion, market value of 5.8 billion
multi-table query
完美指南|如何使用 ODBC 进行无代理 Oracle 数据库监控?
如何获取Class类对象
Interviewer: how to deal with the data loss of redis master-slave cluster switching?
Soft core microprocessor
关于 CMS 垃圾回收器,你真的懂了吗?
2022 global Vocational Education Industry Development Report
SSM实战项目-前后分离(简单易懂)
Seata 在蚂蚁国际银行业务的落地实践
Map接口
Redis distributed online installation
Do you really understand CMS garbage collector?
Four characteristics of transactions (acid):
「游戏引擎 浅入浅出」4.1 Unity Shader和OpenGL Shader
Self built personalized automatic quotation system to cope with changeable quotation mode
MySQL extensions
SparkSubmit.main()方法提交外部参数,远程提交standalone集群任务
What should I do if I can't see any tiles on SAP Fiori launchpad?