Spring Cloud Feign【源码篇】Feign 如何调用Ribbon进行客户端负载均衡

参考资料:Spring Cloud 官网

相关版本:Spring Boot 2.1.5.RELEASE 、Spring Cloud Greenwich.SR

回顾

Spring Cloud Feign【源码篇】Feign 如何进行服务间请求调用 中,提到了 Feign 如何进行服务调用的。

Feign 在封装了相关的请求参数 RequestTemplate 后,发起服务远程请求调用。 代码如下:

final class SynchronousMethodHandler implements MethodHandler {
   
	private final Client client;
	Object executeAndDecode(RequestTemplate template) throws Throwable {
   
		// 拼装完整的 request 请求
		Request request = targetRequest(template);

		// 发起请求,并获取返回结果 Response
		response = client.execute(request, options);

		// 解析 response 请求,获取最后的结果
		Object result = decode(response);

		// 响应返回结果
		return result;
	}
}

从源码中可以很直观的看到真正发起服务请求调用的是 feign.Client#execute

feign.Client#execute 为切入点,进行分析。

Feign 选择 Ribbon 作为负载均衡客户端

查看 feign.Clien 源码,feign.Client 是一个接口,它有两个实现类

  • feign.Client.Default

  • org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient

其中 LoadBalancerFeignClient 为 Ribbon 负载均衡客户端实现类。

Feign 是如何注册 LoadBalancerFeignClient 作为其客户端调用实现的。首先想到的就是自动配置类 FeignRibbonClientAutoConfiguration

聚焦 FeignRibbonClientAutoConfiguration

@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 cac
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值