博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springcloud Ribbon自定义负载均衡插件
阅读量:6800 次
发布时间:2019-06-26

本文共 2822 字,大约阅读时间需要 9 分钟。

现在我们通过插件的方式添加新的一种策略。

 

package com.zhuyang.config;    import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.context.annotation.Bean;    import com.netflix.client.config.IClientConfig;  import com.netflix.loadbalancer.IPing;  import com.netflix.loadbalancer.IRule;  import com.netflix.loadbalancer.PingUrl;  import com.netflix.loadbalancer.RandomRule;    /**  *   * Here, we override the IPing and IRule used by the default load balancer. The  * default IPing is a NoOpPing (which doesn’t actually ping server instances,  * instead always reporting that they’re stable), and the default IRule is a  * ZoneAvoidanceRule (which avoids the Amazon EC2 zone that has the most  * malfunctioning servers, and might thus be a bit difficult to try out in our  * local environment).  *   */  @Configurationpublic class RibbonConfiguration {      @Bean    public IClientConfig ribbonPing(){        IClientConfig config = new DefaultClientConfigImpl();        return config;    }    @Bean      public IRule ribbonRule(IClientConfig config) {                    return new MyRule();      }  }    

MyRule.java是自己定义的个算法,大概算法是随机选中能被2整除的server

 
import java.util.ArrayList;  import java.util.List;  import java.util.Random;    import com.netflix.client.config.IClientConfig;  import com.netflix.loadbalancer.AbstractLoadBalancerRule;  import com.netflix.loadbalancer.ILoadBalancer;  import com.netflix.loadbalancer.Server;    /**  * 自定义rule插件  *   * @author zhu yang  *  */  public class MyRule extends AbstractLoadBalancerRule {      /**      * 选择能被2整除的server      *       * @param lb      * @param key      * @return      */      public Server choose(ILoadBalancer lb, Object key) {          if (lb == null) {              return null;          }          Server server = null;            while (server == null) {              if (Thread.interrupted()) {                  return null;              }              List
upList = lb.getReachableServers(); System.out.println("upList=" + upList); List
allList = lb.getAllServers(); System.out.println("allList=" + allList); int serverCount = allList.size(); if (serverCount == 0) { /* * No servers. End regardless of pass, because subsequent passes * only get more restrictive. */ return null; } if (serverCount < 2) { server = upList.get(0);// if only 1 server. return return server; } List
newList = new ArrayList
(); for(int i=0;i

  

这样我们自己写的策略算法就可以正常工作了。 所有的请求都只会到8003或者8000折两台server去。

转载地址:http://ovuwl.baihongyu.com/

你可能感兴趣的文章
C# Excel数据有效性
查看>>
java 调用微信截图工具
查看>>
【Hadoop】伪分布式环境搭建、验证
查看>>
李洪强经典面试案例33-如何面试 iOS 工程师
查看>>
[LeetCode] Sum of Left Leaves 左子叶之和
查看>>
【温故而知新-Javascript】使用 Window 对象
查看>>
Nginx location 匹配顺序整理
查看>>
javascript (function() { /* code */ })() 自执行函数
查看>>
MVC数据库数据分页显示
查看>>
CreatarGlobe实现多机立体显示方案(初稿)
查看>>
JAVA设计模式初探之桥接模式
查看>>
拉链表-增量更新方法一
查看>>
有什么样的博客手机客户端
查看>>
听10秒就会喜欢上的歌曲
查看>>
去掉发送到里的选项
查看>>
windows server 2008修改远程桌面连接数
查看>>
初探Object Pascal的类(二)
查看>>
成功站长应具备的良好心态
查看>>
mke2fs 制作ext2文件系统image
查看>>
模式识别之线条矩形识别---长方形画布或纸张并提取图像内容
查看>>