Spring Cloud 2.2.2 源碼之四十八nacos客戶端觸發服務刷新原理二
服務獲取和刷新的流程圖
NacosServerList實例化
繼續上篇,接下來就是實例化到這裏了:
config
就是上篇最後實例化的DefaultClientConfigImpl
,clientName
被賦值爲服務名。
initWithNiwsConfig
剛好可以取到:
ZoneAwareLoadBalancer實例化
可以看到這裏注入的就是NacosServerList,因爲NacosServerList
實現了ServerList
接口,容器裏唯一一個ServerList
的實例,剛好注入。
然後在初始化方法restOfInit
的updateListOfServers
中調用的就是NacosServerList
的getUpdatedListOfServers
方法,因此這個更新服務列表的任務成功的被nacos
接管了:
NacosServerList的getUpdatedListOfServers
內部是調用NacosDiscoveryProperties
中的NamingService
的selectInstances
方法,所以一開始看到NacosServerList
創建的時候怎麼就只傳了一個NacosDiscoveryProperties
,這個是配置,能幹嘛呢,其實他裏面有個NamingService
實例,可是功能強大啊:
後面說他是怎麼更新的,當然此時ZoneAwareLoadBalancer
也開了一個定時任務30秒一次的調用updateListOfServers
方法,也就是調用getUpdatedListOfServers
,但是其實他只是獲取了一次,後面就不會重複獲取,更新的任務其實是交給HostReactor
中的UpdateTask
任務了,爲什麼這麼說呢,後面講。
好了,今天就到這裏了,希望對學習理解有幫助,大神看見勿噴,僅爲自己的學習理解,能力有限,請多包涵。