软件系统定制开发默认的负载均衡规则
lRule:软件系统定制开发根据特定算法中从服务列表中选取一个要访问的服务。
- RoundRobinRule 轮询。
- RandomRule 随机。
- RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重。
- WeightedResponseTimeRule 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择。
- BestAvailableRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务。
- AvailabilityFilteringRule 先过滤掉故障实例,再选择并发较小的实例。
- ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器。
Ribbon负载规则的更换
- 要求在配置Ribbon的负载规则时,不能将其配置类放到@ComponentScan扫描到的路径,即主启动类的扫描路径。(也是就是不能和主启动类同包)
- 如果放置到@ComponentScan可以扫描到位置的话,其配置就会被Ribbon客户端共享,就不能达到定制化的要求了。
负载规则配置
package com.gcl.myrule;import com.netflix.loadbalancer.IRule;import com.netflix.loadbalancer.RandomRule;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MySelfRule { @Bean public IRule myRule(){ return new RandomRule(); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
主启动设置
package com.gcl.springcloud;import com.gcl.myrule.MySelfRule;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.cloud.netflix.ribbon.RibbonClient;@EnableEurekaClient@SpringBootApplication@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)public class OrderMain8080 { public static void main(String[] args) { SpringApplication.run( OrderMain8080.class, args ); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
测试
Ribbon默认的负载规则是轮询,我们换成了随机。