基本流程图
DynamicServerListLoadBalancer的restOfInit
enableAndInitLearnNewServersFeature开启服务列表更新的定时任务
开启更新定时器:
开启定时器,延迟10秒,间隔30秒,然后执行updateListOfServers
方法。
updateListOfServers服务列表更新
定时器开好了,会先进行一次服务列表更新。
就是上篇说的DomainExtractingServerList
的getUpdatedListOfServers
方法。
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;
}
最后获取到的集合还要去更新负载均衡器里的集合,也就是BaseLoadBalancer
的allServerList
,这个就不说了,自己看下好了。
这样ZoneAwareLoadBalancer
初始化干的事基本说完了,开启Ping
定时任务,和刷新服务列表任务,刷刷一次服务列表,设置负载均衡规则等设置。
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。