SpringCloudRPC远程调用核心原理:feign.Client客户端容器实例

feign.Client客户端容器实例

前面介绍了常用的Feign客户端实现类,大致如下:

(1)Client.Default类:默认的实现类,使用JDK的HttpURLConnnection类提交HTTP请求。

(2)ApacheHttpClient类:该客户端类在内部使用ApacheHttpClient开源组件提交HTTP请求。

(3)OkHttpClient类:该客户端类在内部使用OkHttp3开源组件提交HTTP请求。

(4)LoadBalancerFeignClient类:内部使用Ribbon负载均衡技术完成HTTP请求处理。

Feign在启动时有两个与feign.Client客户端实例相关的自动配置类,根据多种条件组合装配不同类型的feign.Client客户端实例到Spring IOC容器,这两个自动配置类为
FeignRibbonClientAutoConfiguration和FeignAutoConfiguration。

装配LoadBalancerFeignClient负载均衡容器实例

详细来看,Feign涉及的与Client相关的两个自动配置类具体如下:

(1)
org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration:此自动配置类能够配置具有负载均衡能力的FeignClient容器实例。

(2)
org.springframework.cloud.openfeign.FeignAutoConfiguration:此自动配置类只能配置原始的FeignClient客户端容器实例。

事实上,第一个自动配置类
FeignRibbonClientAutoConfiguration在容器的装配次序上优先于第二个自动配置类FeignAutoConfiguration。

为了达到高可用,Spring Cloud中一个微服务提供者至少应该部署两个以上节点,从这个角度来说,LoadBalancerFeignClient容器实例已经成为事实上的标配。

具体可以参见
FeignRibbonClientAutoConfiguration源码,节选如下:

import com.netflix.loadbalancer.ILoadBalancer;
...
@ConditionalOnClass({ILoadBalancer.class, Feign.class})
@Configuration
@AutoConfigureBefore({FeignAutoConfiguration.class}) //本配置类具备优先权
@EnableConfigurationProperties({FeignHttpClientProperties.class})
@Import({
HttpClientFeignLoadBalancedConfiguration.class,//配置:包装ApacheHttpClient实例的负载均衡客户端
OkHttpFeignLoadBalancedConfiguration.class, //配置:包装OkHttpClient实例的负载均衡客户端
DefaultFeignLoadBalancedConfiguration.class //配置:包装Client.Default实例的负载均衡客户端
})
public class FeignRibbonCl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值