更换ribbon的默认负载均衡策略和自定负载均衡策略

木易 3464 0 0

ribbon的默认负载均衡是轮询策略,会进行无差别的分配。

ribbon有七种负载均衡模式

  1. RoundRobinRule:默认规则,通过简单的轮询服务列表来选择服务器

  2. AvailabilityFilteringRule:可用性筛选规则

  3. WeightedResponseTimeRule:为每个服务器赋予一个权重值,服务器的响应时间越长,该权重值就越少,这个规则会随机选择服务器,权重值有可能会决定服务器的选择

  4. ZoneAvoidanceRule:该规则以区域、可用服务器为基础进行服务器选择,使用区域(Zone)对服务器进行分类

  5. BestAvailableRule:忽略"短路"的服务器,并选择并发数较低的服务器

  6. RandomRule:随机选择可用服务器

  7. RetryRule:含有重试的选择逻辑,如果使用 RoundRobinRule 选择的服务器无法连接,那么将会重新选择服务器

这里我们更换默认的负载均衡策略,使用随机的负载均衡策略


demo代码

demo.zip


只需要在服务消费者的启动类里加上此方法就可以,也可以配置在专门的类中,作为配置文件。当我们想要更换不同的策略只需要返回相应的实例即可。

com.ymx.consumer;

com.netflix.loadbalancer.IRule;
com.netflix.loadbalancer.RandomRule;
com.ymx.consumer.irule.CustomRule;
org.springframework.boot.SpringApplication;
org.springframework.boot.autoconfigure.;
org.springframework.cloud.netflix.eureka.;
org.springframework.cloud.openfeign.;
org.springframework.context.annotation.;

java.util.ArrayList;
java.util.List;

(basePackages = )
ConsumerApplication {

    main(String[] args) {
        SpringApplication.(ConsumerApplication., args);
    }

    @Bean
    public IRule loadBalanceRule(){
       return new RandomRule();
    }
}



自定义负载均衡策略,我们可以使用不同的算法,来实现负载均衡策略的选择,这里我们只做一个简单的demo,排除指定的端口,进行负载均衡。你也可以使用其他的算法来实现负载均衡策略。和上面一样在启动类上加上

@Bean
public IRule loadBlanaceRule(){
    //指定要排除的Server端口号
    List<Integer> ports = new ArrayList<>();
    ports.add(8082);
    //CustomRule(ports)就是我们的指定算法进行负载均衡
    return  new CustomRule(ports);

}



  实现负载均衡的实体类

com.ymx.consumer.irule;

com.netflix.loadbalancer.ILoadBalancer;
com.netflix.loadbalancer.IRule;
com.netflix.loadbalancer.Server;

java.util.ArrayList;
java.util.List;
java.util.Random;

CustomRule IRule {


    ILoadBalancer ;
    List<Integer> ;

    CustomRule() {
    }

    CustomRule(ILoadBalancer lb) {
        .= lb;
    }
    CustomRule(List<Integer> excludePorts) {
        .= excludePorts;
    }

    Server choose(Object key) {
        List<Server> servers = .getReachableServers();
        List<Server> availableServers = .getAvailabServers(servers);
        .getAvailabRandomServers(availableServers);
    }

    List<Server> getAvailabServers(List<Server> servers) {
        (==|| .size()==){
            servers;
        }
        List<Server> aservers = ArrayList<>();
        (Server server : servers){  flag = ;
            (Integer port : ){
                (server.getPort()==port){
                    flag = ;
                    ;
                }

            }
            (flag) {
                aservers.add(server);
            }
        }
        aservers;
    }

    Server getAvailabRandomServers(List<Server> availableServers) {

        index = Random().nextInt(availableServers.size());

        availableServers.get(index);

    }



    setLoadBalancer(ILoadBalancer lb) {
        .= lb;

    }

    ILoadBalancer getLoadBalancer() {
        ;
    }
}



这样就完成了一个简单的自定义负载均衡策略,提供者中就不会出现端口为8082的提供者了。



评论区
请写下您的评论...
暂无评论...
猜你喜欢
linux系统 1404 nginx配置以及选取(linux)一、nginx配置安装nginx,修改conf/nginx.conf配置文件在http块下添加#配置动态服务器列表
rabbitmq,haproxy 603 力,实现。HAProxy简介HA-HighAvailable高可用,Proxy-代理。HAProxy是一款提供高可用性、以及基于TCP(第四层)HTTP(第七层)应用代理软件,支持虚
java虚拟机(jvm) 1384 jvm内存模型分析-垃圾收集器内存分配(1)说起垃圾收集(GarbagcCollcction,GC),大部分人都把这项技术当做java语言伴生产物。事实上,GC历史比Java久远,1960
软件使用 1070 一、禁用WindowsUpdate服务二、在组里关闭Win10新相关服务三、禁用任务计划里边Win10新四、在注册表中关闭Win10新我windows版本是专业版,家庭版有
keepalived,nginx,linux 1316 LVS软件设计,用来管理并监控LVS集群系统中各个服务节点状态,后来又加入了可以实现高可用VRRP(VirtualRouterRedundancyProtocol,虚拟路由器冗余协议)功
linux 865 /sda11014M141M874M14%/boottmpfs100M0100M0%/run/user/0三、添加磁盘,演示分区添加一个硬盘sdb,演示分区在虚拟机设置中点击添加,选择硬盘重启,查看添加
算法基础 11572 1.本质不同带宽速度(Mbit/s)是一个速度单位,表示是在网络上比特流(bit)在网络上传输速度。一比特就是一个二进制位。而我们实际下速度(M/s)代表是每秒下数据占用了多少内存
official 966 leetcode第110题(简单)原链接https://leetcode-cn.com/problems/balanced-binary-tree/题目描述给一个二叉树,判断它是否是高度平二叉
归档
2018-12  5 2019-01  2 2019-04  1 2019-05  2 2019-06  1 2019-11  1 2019-12  3
标签
博客 java linux springboot 笔记 问题 cloud
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。