Spring Cloud 2.2.2 源碼之四十八nacos客戶端觸發服務刷新原理二

服務獲取和刷新的流程圖

在這裏插入圖片描述

NacosServerList實例化

繼續上篇,接下來就是實例化到這裏了:
在這裏插入圖片描述
config就是上篇最後實例化的DefaultClientConfigImplclientName被賦值爲服務名。
在這裏插入圖片描述
initWithNiwsConfig剛好可以取到:
在這裏插入圖片描述

ZoneAwareLoadBalancer實例化

可以看到這裏注入的就是NacosServerList,因爲NacosServerList實現了ServerList接口,容器裏唯一一個ServerList的實例,剛好注入。
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
然後在初始化方法restOfInitupdateListOfServers中調用的就是NacosServerListgetUpdatedListOfServers方法,因此這個更新服務列表的任務成功的被nacos接管了:
在這裏插入圖片描述

NacosServerList的getUpdatedListOfServers

內部是調用NacosDiscoveryProperties中的NamingServiceselectInstances方法,所以一開始看到NacosServerList創建的時候怎麼就只傳了一個NacosDiscoveryProperties,這個是配置,能幹嘛呢,其實他裏面有個NamingService實例,可是功能強大啊:
在這裏插入圖片描述
後面說他是怎麼更新的,當然此時ZoneAwareLoadBalancer也開了一個定時任務30秒一次的調用updateListOfServers方法,也就是調用getUpdatedListOfServers,但是其實他只是獲取了一次,後面就不會重複獲取,更新的任務其實是交給HostReactor中的UpdateTask任務了,爲什麼這麼說呢,後面講。

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

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