SpringCloud:集群化服务提供者实现自定义负载均衡算法(存疑)

郎家岭伯爵 2022年06月15日 367次浏览

背景

前面我们实现了服务提供者的集群,以及实现了简单的负载均衡。

但是负载均衡的算法是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(){}代码块理论上可以实现随机的负载均衡,以及自定义的负载均衡。

但博主这里的随机负载均衡未生效,博主能力有限,没有排查到问题所在。这里留下问题点后续再看吧。如有大佬了解问题所在,欢迎在评论区指出,或者邮件博主指点一下。