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定時任務,和刷新服務列表任務,刷刷一次服務列表,設置負載均衡規則等設置。

好了,今天就到這裏了,希望對學習理解有幫助,大神看見勿噴,僅爲自己的學習理解,能力有限,請多包涵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章