SpringBoot+SpringCloud成长之旅5-负载均衡器(Ribbon)

本来想接下去写SpringCloud里我们常用的服务之间通信方式Feign的,但是在前面,我们讲到了当在B服务调用A服务时,同时A服务又有多个的情况下,我们是通过@LoadBalanced或者LoadBalancerClient来实现用过应用名,就可以达到我们的需求。这里其实可以了解下为什么加上这个注解,就可以访问到我们想要的方法了。

Ribbon

Ribbon是一个负载均衡器,他是怎么工作的呢。他的核心有三点:1.服务发现,2.服务选择,3.服务监听。根据名字就能很好的理解他的作用,服务发现就是发现所有服务,服务选择就是通过某种规则选择其中一个服务,服务监听则是监听所有服务做到及时剔除失效服务。他的主要组件也有三个,分别是ServerList,ServerListFilter,IRule。其中ServerList是用来获取所有的可用服务列表的,然后会通过ServerListFilter过滤掉一部分的服务,然后通过IRule获取其中一个服务。

当然了,我们可以通过LoadBalancerClient的源码去看下这几个组件的实现方式。

我们之前写的这一段代码,就是根据服务名,去获取服务的信息了。所以我们追踪下choose这个方法的源码。

1.

2.

3.这里,我们看下ILoadBalancer里有些什么

4.ILoadBalancer这个接口里有很方法,其中有两个是获取ServerList的,其中一个已经废弃了,我们看另外一个getAllServers()

5.在这里就可以获取所有的服务列表了。打断点进行调试,就可看下。

当我们获取到服务列表之后,就是要从这些列表中获取某个服务了,这时候Ribbon就会根据他的服务发现策略去获取服务了,至于策略是怎么样的呢,让我们来看下。

1.很明显,这个chooseServer就是选择服务的方法了。

2.我们这里只需要关心他的选择规则rule.choose就好了

3.我们可以看见,IRule 初始定义了个new RoundRobinRule(),很明显就是轮询的机制了。

4.了解了上面的东西之后,我们肯定会有疑问,改怎么修改他的规则呢。这里其实也很简单,我们去spring官网去查找

进入这个页面,然后选择Spring Cloud Netflix 并选择对应版本的文档。并搜索ribbon选择自定义ribbon客户端。

 

下拉找到我们需要的配置方法。

把这段话复制到我们的配置文件,然后我们需要去找其他规则,在哪呢,我们搜索IRule就能找到:

这些就是其他规则了,我们挑一个,通过翻译,我们大概能知道,这个规则呢,他会自动去选择并发量最少的服务,这是不是很nice。

配置完的配置文件如下

ok,这样就完成了我们需要的策略修改。当然,到这里,又有人会想到,我们能不能自定义呢,我非要先请求A1服务两次,再请求A2服务三次,当时也是ok的啦。不过我就不去了解了,等用到了再说把。哈哈

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值