Ribbon-源码分析

ribbon负载均衡,在RestTemplate上面添加注解@LoadBalanced就可以实现负载均衡。接下来分析Ribbon是怎么实现负载均衡的。老规矩,先查看相关的启动依赖下面的spring.factorise文件中配置的自动装配的类。进入spring-cloud-netflix-ribbon#spring.factorise,该文件中自动专配了RibbonAutoConfiguration类。进入该类看一下详情信息

如此可知,RibbonAutoConfiguration会在LoadBalancerAutoConfiguration之前进行加载,我们先进入 LoadBalancerAutoConfiguration看看里面具体的内容。

只有存在RestTemplate类的时候才会加载这个自动配置的类。注入的那个RestTemplate集合会将所有的加了@LoadBalanced注解的RestTemplate全都放到这个集合中。 

当没有RetryTemplate的时候给RestTemplate添加LoadBalancerInterceptor,当存在 RetryTemplate则会添加RetryLoadBalancerInterceptor拦截器。接下来我们就看一下这个拦截器都做了一些什么。

可以看到,这里主要是通过LoadBalancerClient去执行方法。我们回到RibbonAutoConfiguration看看LoadBalancerClient是什么时候加载,加载的细节又是什么。

 具体的实现类为RibbonLoadBalancerClient,通过代码可知,需要SpringClientFactory作为有参构造函数的参数才能够加载该类。现在先看一下如何加载SpringClientFactory的。点击源码可以看到,需要加载RibbonClientConfiguration,我们进入RibbonClientConfiguration看看这里又做了一些什么。该类中加载了IRule(负载均衡规则)、IPing(判断服务是否可用)、ILoadBalancer(负载均衡主要的执行者)、ServerList<Server>负载均衡的机器。

接下来回到RibbonLoadBalancerClient的execute方法。

先是获取负载均衡器,然后通过负载均衡规则找到负载均衡到服务,最后继续调用execute的重载方法。获取负载均衡器我们上面已经分析过了,通过SpringClientFactory类去加载了一些负载均衡的组件。通过一步步进入源码的调用关系,我们看到最终是调用IRule中的choose方法通过不同的规则选取了一个实例。回过头去看LoadBalancer什么时候加载的服务列表 ,在初始化RibbonLoadBalancerClient的时候会拉取EurekaClient缓存中的服务信息,并且启动一个定时任务定时去拉取这些信息。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值