更换ribbon的默认负载均衡策略和自定负载均衡策略
ribbon的默认负载均衡是轮询策略,会进行无差别的分配。
ribbon有七种负载均衡模式
RoundRobinRule:默认规则,通过简单的轮询服务列表来选择服务器
AvailabilityFilteringRule:可用性筛选规则
WeightedResponseTimeRule:为每个服务器赋予一个权重值,服务器的响应时间越长,该权重值就越少,这个规则会随机选择服务器,权重值有可能会决定服务器的选择
ZoneAvoidanceRule:该规则以区域、可用服务器为基础进行服务器选择,使用区域(Zone)对服务器进行分类
BestAvailableRule:忽略"短路"的服务器,并选择并发数较低的服务器
RandomRule:随机选择可用服务器
RetryRule:含有重试的选择逻辑,如果使用 RoundRobinRule 选择的服务器无法连接,那么将会重新选择服务器
这里我们更换默认的负载均衡策略,使用随机的负载均衡策略
demo代码
只需要在服务消费者的启动类里加上此方法就可以,也可以配置在专门的类中,作为配置文件。当我们想要更换不同的策略只需要返回相应的实例即可。
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系统
1525
nginx配置负载均衡以及负载均衡的策略的选取(linux)一、nginx配置负载均衡安装nginx,修改conf/nginx.conf配置文件在http块下添加#配置动态服务器列表
rabbitmq,haproxy
739
力,实现负载均衡。HAProxy简介HA-HighAvailable高可用,Proxy-代理。HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚
java虚拟机(jvm)
1534
jvm内存模型分析-垃圾收集器和内存分配策略(1)说起垃圾收集(GarbagcCollcction,GC),大部分人都把这项技术当做java语言的伴生产物。事实上,GC的历史比Java久远,1960
blog
win10彻底永久关闭自动更新的方法
软件使用
1174
一、禁用WindowsUpdate服务二、在组策略里关闭Win10自动更新相关服务三、禁用任务计划里边的Win10自动更新四、在注册表中关闭Win10自动更新我的windows版本是专业版,家庭版有
keepalived,nginx,linux
1507
LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP(VirtualRouterRedundancyProtocol,虚拟路由器冗余协议)功
blog
linux系统关于磁盘的分区和挂载
linux
986
/sda11014M141M874M14%/boottmpfs100M0100M0%/run/user/0三、添加磁盘,演示分区和挂载添加一个硬盘sdb,演示分区和挂载在虚拟机设置中点击添加,选择硬盘重启,查看添加的硬
算法基础
12168
1.本质不同带宽速度(Mbit/s)是一个速度单位,表示的是在网络上比特流(bit)在网络上传输的速度。一比特就是一个二进制位。而我们认为的实际下载速度(M/s)代表的是每秒下载的数据占用了多少内存
ofc
平衡二叉树
official
1088
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
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。