ribbon-loadbalacer.-2.2.2.jar
抽象类:public abstract class AbstractServerPredicate
//随机策略
public Optional<Server> chooseRandomlyAfterFiltering(List<Server> servers) {
List<Server> eligible = this.getEligibleServers(servers);
return eligible.size() == 0?Optional.absent():Optional.of(eligible.get(this.random.nextInt(eligible.size())));
}
//重复轮询策略(nextIndex自增后,服务器的个数取模)
public Optional<Server> chooseRoundRobinAfterFiltering(List<Server> servers) {
List<Server> eligible = this.getEligibleServers(servers);
return eligible.size() == 0?Optional.absent():Optional.of(eligible.get(this.nextIndex.getAndIncrement() % eligible.size()));
}
//随机策略
public Optional<Server> chooseRandomlyAfterFiltering(List<Server> servers, Object loadBalancerKey) {
List<Server> eligible = this.getEligibleServers(servers, loadBalancerKey);
return eligible.size() == 0?Optional.absent():Optional.of(eligible.get(this.random.nextInt(eligible.size())));
}
//重复轮询策略(nextIndex自增后,服务器的个数取模)
public Optional<Server> chooseRoundRobinAfterFiltering(List<Server> servers, Object loadBalancerKey) {
List<Server> eligible = this.getEligibleServers(servers, loadBalancerKey);
return eligible.size() == 0?Optional.absent():Optional.of(eligible.get(this.nextIndex.getAndIncrement() % eligible.size()));
}
本文深入探讨了Ribbon负载均衡器中两种核心策略:随机选择与轮询选择。通过源码分析,揭示了如何从服务器列表中筛选出符合条件的服务器,并采用随机或轮询方式选择目标服务器的过程。
564

被折叠的 条评论
为什么被折叠?



