Version: Next
Ribbon 负载均衡
Ribbon 中定义了一个
IRule接口package com.netflix.loadbalancer;public interface IRule {Server choose(Object var1);void setLoadBalancer(ILoadBalancer var1);ILoadBalancer getLoadBalancer();}显然,其用来选择具体的负载均衡策略
Ribbon 自带负载均衡策略
IRule在 Ribbon 中存在的7个实现类:
实现类 负载均衡策略 com.netfix.loadbalancer.RoundRobinRule轮询 com.netfix.loadbalancer.RandomRule随机 com.netfix.loadbalancer.RetryRule先按照 轮询获取服务,如果获取服务失败则在指定时间内进行重试,获取可用服务WeightedResponseTimeRule对 轮询的扩展,响应速度越快的实例选择去那种越大,越容易被选择BestAvailableRule会先过滤掉由于多次访问故障从而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务 AvailabilityFilteringRule先过滤掉故障实例,再选择并发较小的实例 ZoneAvoidanceRule复合判断 server所在区域的性能和server的可用性选择服务器
更改负载均衡策略
注意
自定义配置类不能放在 @ComponentScan 所扫描的当前包及其子包下,否则自定义配置会被所有 Ribbon 客户端共享,达不到特殊化定制的目的
提示
先恢复环境
- 使用 Eureka 作为服务注册中心,恢复为 Eureka Server 集群,开启保护模式,恢复默认心跳时间,超时时间
- 将
8001、8002都注册到注册中心
在SpringBoot中,默认 @ComponentScan 扫的就是 主启动类 所在的包及其子包,因此,要跳到主启动类所在包外面去建一个新包
在
order80新建com.bsx.myrule包
新建
MySelfRule负载均衡规则类,其实一个 Spring 配置类/*** 自定义 Ribbon 负载均衡规则*/@Configurationpublic class MySelfRule {@Beanpublic IRule myRule() {return new RandomRule(); // 随机节点策略}}在主启动类添加
@RibbonClient注解
name:CLOUD-PAYMENT-SERVICE,Eureka Server 中的服务名configuration:填写自定义负载均衡策略类MySelfRule.class@SpringBootApplication@EnableEurekaClient@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)public class OrderMain80 {public static void main(String[] args) {SpringApplication.run(OrderMain80.class, args);}}
此时,多次访问 http://127.0.0.1:80/consumer/payment/get/2,会发现端口号随机变化