为什么要在ZoneAwareLoadBalancer.chooseServer方法中为每个区域创建平衡器?

时间:2019-03-14 09:15:30

标签: spring-boot load-balancing spring-cloud ribbon netflix-eureka

我找不到这种行为的用法

有人解决我的疑问吗?

源代码如下:

public Server chooseServer(Object key) {
    ...
    getLoadBalancer(zone).setServersList(entry.getValue());
    ...
}

BaseLoadBalancer getLoadBalancer(String zone) {
    zone = zone.toLowerCase();
    BaseLoadBalancer loadBalancer = balancers.get(zone);
    if (loadBalancer == null) {
        // We need to create rule object for load balancer for each zone
        IRule rule = cloneRule(this.getRule());
        loadBalancer = new BaseLoadBalancer(this.getName() + "_" + zone, rule, this.getLoadBalancerStats());
        BaseLoadBalancer prev = balancers.putIfAbsent(zone, loadBalancer);
        if (prev != null) {
            loadBalancer = prev;
        }
    } 
    return loadBalancer;        
}

0 个答案:

没有答案