Ribbon的版本是2.3.0.release.
这些复杂均衡实现类都实现了com.netflix.loadbalancer.IRule接口,zuul中提供了好几种实现类:
- AvailabilityFilteringRule
- BestAvailableRule
- RandomRule
- RetryRule
- RoundRobinRule
- WeightedResponseTimeRule
- ZoneAvoidanceRule
AbstractLoadBalancerRule如下List-1:
List-1
public abstract class AbstractLoadBalancerRule implements IRule, IClientConfigAware {
private ILoadBalancer lb;
public AbstractLoadBalancerRule() {
}
public void setLoadBalancer(ILoadBalancer lb) {
this.lb = lb;
}
public ILoadBalancer getLoadBalancer() {
return this.lb;
}
}
如上List-1所示,ILoadBalancer提供获取服务列表的功能。
List-2 IRule接口
public interface IRule {
Server choose(Object var1);
void setLoadBalancer(ILoadBalancer var1);
ILoadBalancer getLoadBalancer();
}
List-2中,choose方法就是选取服务的接口,不同的实现类内部选取算法不同。