Ribbon是客户端的负载均衡,在服务消费方调用。
nacos中默认使用了Ribbon。
不能在启动类的同级或子级下配置。
负载均衡策略:
RandomRule:随机选择一个服务实例;
RoundRobinRule:轮询负载均衡策略;
RetryRule:在轮询的基础上进行重试;
WeightedResponseTimeRule:权重,nacos还扩展了一个自己的基于配置的权重扩展;
ClientConfigEnableRoundRobinRule:内部定义了RoundRobinRule,choose方法还是采用了RoundRobinRule的choose方法,所以它的选择策略和RoundRobinRule一致。
BestAvailableRule:过滤掉失效的服务实例,顺便找出并发请求最小的服务实例;
ZoneAvoidanceRule:默认规则,区域就近原则,然后采用轮询方式;
修改默认负载均衡:
代码中实现负载均衡
@Configuration
public class RibbonRandomRuleConfig {
@Bean
public IRule iRule() {
return new RandomRule();
}
}
或配置文件中实现负载均衡
启动类上增加注解,写明服务提供方。
自定义负载均衡策略:
public class CustomRule extends AbstractLoadBalancerRule {
@Override
public Server choose(Object o) {
ILoadBalancer loadBalancer = this.getLoadBalancer();
// 获得当前请求的服务实例
List<Server> reachableServers = loadBalancer.getReachableServers();
int random = ThreadLocalRandom.current().nextInt(reachableServers.size());
Server server = reachableServers.get(random);
// if (server.isAlive()) {
// return null;
// }
return server;
}
@Override
public void initWithNiwsConfig(IClientConfig iClientConfig) {
}
}
配置文件中增加配置,开启饥饿加载: