ribbon自定义负载均衡策略,应用所有服务_dubbo的负载均衡策略

ribbon自定义负载均衡策略,应用所有服务_dubbo的负载均衡策略Ribbon默认的负载均衡策略默认的有下面几种:我们也可以自定义负载均衡策略:修改springcloud-consumer-dept-80的主启动类:下面开始编写自定义配置类MySelfRule,但这个类不能乱放!官方文档给出警告:这个自定义的类不能放在@ComponentScan所扫描的当前包以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,也就是我们达…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Ribbon默认的负载均衡策略默认的有下面几种:
在这里插入图片描述
我们也可以自定义负载均衡策略:
修改springcloud-consumer-dept-80的主启动类:
在这里插入图片描述
下面开始编写自定义配置类MySelfRule,但这个类不能乱放!

官方文档给出警告:
这个自定义的类不能放在@ComponentScan所扫描的当前包以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,也就是我们达不到特殊化指定的目的了。

新建包编写MySelfRule类:
在这里插入图片描述
自定义算法RandomRule_ZY 如下:

 public class RandomRule_ZY extends AbstractLoadBalancerRule
{
 // total = 0 // 当total==5以后,我们指针才能往下走,
 // index = 0 // 当前对外提供服务的服务器地址,
 // total需要重新置为零,但是已经达到过一个5次,我们的index = 1
 // 分析:我们5次,但是微服务只有8001 8002 8003 三台,OK?

 private int total = 0;    // 总共被调用的次数,目前要求每台被调用5次
 private int currentIndex = 0; // 当前提供服务的机器号

public Server choose(ILoadBalancer lb, Object key)
{
  if (lb == null) {
   return null;
  }
  Server server = null;
  while (server == null) {
   if (Thread.interrupted()) {
    return null;
   }

   List<Server> upList = lb.getReachableServers();
   List<Server> allList = lb.getAllServers();
   int serverCount = allList.size();
   if (serverCount == 0) {
    return null;
   }
 if(total < 5)
            {
             server = upList.get(currentIndex);
             total++;
            }else {
              total = 0;
             currentIndex++;
             if(currentIndex >= upList.size())
             {
               currentIndex = 0;
             }
            } 
 if (server == null) {
    Thread.yield();
    continue;
   }
 if (server.isAlive()) {
    return (server);
   }  
   server = null;
   Thread.yield();
   }
   return server;
   }
@Override
 public Server choose(Object key)
 {
  return choose(getLoadBalancer(), key);
 }

@Override
 public void initWithNiwsConfig(IClientConfig clientConfig)
 {
 }
 }             

自定义算法RandomRule_ZY 必须继承AbstractLoadBalanceRule类

启动springcloud-eureka-7001,7002,7003,8001,8002,8003,80 电脑惨叫的声音。。。
测试发现,此时的负载均衡策略,就是我们自定义的负载均衡策略!

github :https://github.com/XiaoMaKui/test2

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182436.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 踩坑记录:springboot 不识别properties配置文件

    踩坑记录:springboot 不识别properties配置文件

    2020年11月19日
    266
  • java 分布式计算框架_java分布式系统框架的分类「建议收藏」

    java 分布式计算框架_java分布式系统框架的分类「建议收藏」鲁班学院java架构师成长路线随着电商行业的崛起,越来越多的人为了省事更习惯网购,今天我们就来熟悉Java分布式系统中的Dubbo,Dubbo就是来解决Java分布式系统中间的子系统之间相互调用相互协作的一个框架。在Dubbo之前就有一个Java分布式系统框架RPC(远程过程调用),多个子系统之间需要实现相互调用必须要借助网络来表达调用的语义和传达调用的数据,RPC采用客户机/服务器模式。请求程序…

    2022年5月31日
    53
  • js split 用法「建议收藏」

    js split 用法「建议收藏」split使用方法

    2025年5月30日
    0
  • C++学习——类和对象

    C++学习——类和对象一、类和对象基本知识:1、类的访问控制有哪些?公有成员:以关键字public指明。私有成员:以关键字private指明。保护成员:以关键字protected指明。2、拷贝构造函数的作用是什么?用一个已经存在的对象初始化本类的新对象。3、友元函数和友元类的作用是什么?友元提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行 数据共享的机制。对于一个类,可以利用关键字fri…

    2022年8月18日
    3
  • MongoDB 使用场景_mongodb使用教程

    MongoDB 使用场景_mongodb使用教程开机指定数据库位置mongod–dbpathd:\data\db–dbpath选择数据库文档所在的文件夹根据网络参考知识,应使用:mongod –storageEnginemmapv1–dbpath d:\data\db1.用mongoVue直接打开连接即可2.用命令行另外开一个cmd输入mongo 连接数据库showd

    2022年8月21日
    4
  • intentservice使用(Intention)

    IntentService,更好用的Service说起IntentService就需要先了解一下Service。Service是长期运行在后台的应用程序组件。Service不是一个单独的进程,它和应用程序在同一个进程中,Service也不是一个线程,它和线程没有任何关系,所以它不能直接处理耗时操作。如果直接把耗时操作放在Service的onStartCommand()中,…

    2022年4月18日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号