背景
前面我们实现了服务提供者的集群,以及实现了简单的负载均衡。
但是负载均衡的算法是Ribbon
默认的轮询
规则,那么可不可以自定义负载均衡算法呢?答案是一定的。
本文我们将实现自定义的负载均衡算法。
实现
本文是基于上一篇的代码来进行的。
注:
SpringCloud
负载均衡是通过服务消费者
调用服务提供者
的接口来实现,因此我们以下的代码均是修改springcloud-consumer-dept-80
模块来实现的。
随机负载均衡
这里的随机负载均衡仍是Ribbon
为我们实现的。
修改pom.xml
添加依赖:
<dependency>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon-loadbalancer</artifactId>
<version>2.2.5</version>
</dependency>
修改ConfigBean
// 随机负载均衡
@Bean
public IRule myRule(){
return new RandomRule();
}
重启模块
重启springcloud-consumer-dept-80
模块。
测试功能(存疑)
多次访问http://localhost/consumer/dept/get/1
或者http://localhost/consumer/dept/list
,可以看到服务被随机转发到了不同的服务提供者:
总结
通过public IRule myRule(){}
代码块理论上可以实现随机的负载均衡,以及自定义的负载均衡。
但博主这里的随机负载均衡未生效,博主能力有限,没有排查到问题所在。这里留下问题点后续再看吧。如有大佬了解问题所在,欢迎在评论区指出,或者邮件博主指点一下。