策略规则 Ribbon 提供 IRule 接口,该接口定义了如何访问服务的策略,以下是该接口的实现类:
1) RoundRobinRule:轮询,默认使用的规则;
2) RandomRule:随机;
3) AvailabilityFilteringRule:先过滤由于多次访问故障而处于断路器跳闸状态以及并发连接数量超过阀值得服务,然后从剩余服务列表中按照轮询策略进行访问;
4) WeightedResponseTimeRule:根据平均响应时间计算所有的权重,响应时间越快服务权重越有可能被选中;
5) RetryRule:先按照 RoundRobinRule 策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用服务;
6) BestAvailableRule:先过滤由于多次访问故障而处于断路器跳闸状态的服务,然后选择并发量最小的服务;
7) ZoneAvoidanceRule:判断 server 所在区域的性能和 server 的可用性来选择服务器。
策略使用
@Configuration
public class RestConfiguration {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
@Bean
public IRule testRule() {
return new RandomRule();
}
}
手动创建负载均衡规则对象,本次测试使用的策略是随机。
启动 user-consumer 项目使用浏览器访问接口,运行结果如下:
由图可知,随机策略已生效,负载均衡的策略由轮询变成了随机。 源码下载