SpringCloud负载均衡源码分析

SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。

源码分析

1.LoadBalancerIntercepor

为什么我们只输入了service名称就可以访问了呢?之前还要获取ip和端口。

显然有人帮我们根据service名称,获取到了服务实例的ip和端口。它就是LoadBalancerInterceptor,这个类会在对RestTemplate的请求进行拦截,然后从Eureka根据服务id获取服务列表,随后利用负载均衡算法得到真实的服务地址信息,替换服务id。

定位到这个类当中

可以看到这里的intercept方法,拦截了用户请求,然后做了几件事

request.getURI():获取请求URL
originalUri.getHost():获取uri路径的主机名,就是服务id
this.loadBalancer.execute:处理服务id和用户请求

2.LoadBalancerClient

继续跟进execute方法:

getLoadBalance:根据服务id获取ILoadBalancer,而ILoadBalancer会拿着服务id去eureka中获取服务列表并保存起来。

getServer:利用内置的负载均衡算法,从服务列表中选择一个。

3.负载均衡策略IRule

继续跟进getServer方法

再跟进chooseServer方法,发现有有这么一段代码

我们看看这个rule是谁

RoundRobinRule不就是循环的意思嘛,到这里可以结论出SpringCloud底层利用Ribbon实现负载均衡,而Ribbon则通过IRule实现负载均衡,也就是说Ribbon实现负载均衡的组件,一定是IRule的实现类

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值