上面3个教程中,咱提供了 consumer , 注册中心, provide 这三方的内容
这一集解释Ribbon管家式的Ribbon, 当provide 业务繁杂时, 或者请求频繁时,此时就扩展为集群来支持业务的提供,所以此时consumer应该怎么处理与provide的关系呢,调用那一个服务器的provide呢?上图解释
当一个consumer 要怎么处理与provide的关系,怎么均衡请求provide的时,有两种处理方式
- 可以使用负载均衡
- 就是咱所谓的Ribbon管家式处理,使用Ribbon,以Rebbon来管理provide,Ribbon就清楚手里有多少位后宫,然后给consumer 选出中意的后宫娘娘来侍寝;
Ribbon内置7种负载均衡算法,通过IRule接口的choose()方法来实现不同的负载均衡算法,我们通过自己实现choose()方法的方式来达到自定义负载均衡策略的目的
现在开始来试试Rebbon的效过
1, 检测上面写的provide的代码
2, 检测pom.xml 是否需要依赖 Ribbon集成在 spring-cloud-starter-eureka 这个依赖中,所以不需要在导入依赖
3, application.yml 本身就是默认为true,所以可以不需要配置
现在复制一份provide ,作为集群使用
1, 改端口
2, 这里的application.yml provide 和provide2 名字注意要一致,这是相对于10086 一样,一个入口,客服不一样(这里就是负载均衡的关键点)
3, 改好以后,在provide的方法中打个日志,打印出当前执行的provide是哪个,是否负载均衡了
4,在加入计数器,查看当前负载均衡的执行算法
5, 然后相互启动, 注册中心启动,然后启动2个provide 注册到注册中心,然后在启动consumer
6, 然后在查看启动的日志,且调用 consumer的接口,在consumer中多次调用provide的服务
7, Ribbon默认的计算方式为轮询,雨露均沾
测试结果:有规则的轮询交叉调用
Ribbon 的规则 和算法:RoundRobinRule.java 默认的轮询规则
loansbalancer规则地址
更换策略的如何做 :
更改consumer的Ribbon 管家配置
hero-eureka-provide: ## 指定服务名,这个名字就是provide 服务的名字
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule ## 指定规则 这个规则就是从下图片的地址 选择你需要更改的规则,然后改下规则类就ok 【RandomRule】
修改好后,重启consumer
测试 :运行测试consumer 的地址,在查看provide的日志,输出是无规则的随机,轮询是有规则的,交叉调用
ribbon 结算,下一篇为:spring cloud 的 Zuul 网关