Spring Cloud 2.2.2 源码之十七Ribbon执行原理三

基本流程图

在这里插入图片描述

DynamicServerListLoadBalancer的restOfInit

enableAndInitLearnNewServersFeature开启服务列表更新的定时任务

开启更新定时器:
在这里插入图片描述
在这里插入图片描述
开启定时器,延迟10秒,间隔30秒,然后执行updateListOfServers方法。
在这里插入图片描述
在这里插入图片描述

updateListOfServers服务列表更新

定时器开好了,会先进行一次服务列表更新。
在这里插入图片描述
就是上篇说的DomainExtractingServerListgetUpdatedListOfServers方法。
在这里插入图片描述

DiscoveryEnabledNIWSServerList的obtainServersViaDiscovery

最终到这里,其实就是获取EurekaClient,然后调用他的方法获取服务列表,然后封装成DiscoveryEnabledServer对象,放入serverList集合返回。

 private List<DiscoveryEnabledServer> obtainServersViaDiscovery() {
        List<DiscoveryEnabledServer> serverList = new ArrayList<DiscoveryEnabledServer>();

		...
		//获取客户端
        EurekaClient eurekaClient = eurekaClientProvider.get();
        if (vipAddresses!=null){
            for (String vipAddress : vipAddresses.split(",")) {
                // if targetRegion is null, it will be interpreted as the same region of client
                List<InstanceInfo> listOfInstanceInfo = eurekaClient.getInstancesByVipAddress(vipAddress, isSecure, targetRegion);
                for (InstanceInfo ii : listOfInstanceInfo) {
                    if (ii.getStatus().equals(InstanceStatus.UP)) {

    					...

                        DiscoveryEnabledServer des = createServer(ii, isSecure, shouldUseIpAddr);
                        serverList.add(des);
                    }
                }
                if (serverList.size()>0 && prioritizeVipAddressBasedServers){
                    break; // if the current vipAddress has servers, we dont use subsequent vipAddress based servers
                }
            }
        }
        return serverList;
    }

最后获取到的集合还要去更新负载均衡器里的集合,也就是BaseLoadBalancerallServerList,这个就不说了,自己看下好了。

这样ZoneAwareLoadBalancer初始化干的事基本说完了,开启Ping定时任务,和刷新服务列表任务,刷刷一次服务列表,设置负载均衡规则等设置。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值