文章目录
- 1.Nacos Client获取调用服务的提供者列表
- 1.1 从Ribbon的负载均衡入手到Nacos Client获取调用服务的提高者列表
- 1.2 getServers方法返回分析
- 1.3 通过selectInstances方法查找Instances实例
- 1.4 获取到要调用服务的serviceInfo
 
 
 
Nacos Client 从Ribbon负载均衡调用服务。
1.Nacos Client获取调用服务的提供者列表
1.1 从Ribbon的负载均衡入手到Nacos Client获取调用服务的提高者列表

RibbonClientConfiguration#ribbonLoadBalancer()
	@Bean
	@ConditionalOnMissingBean
	public ILoadBalancer ribbonLoadBalancer(IClientConfig config,
			ServerList<Server> serverList, ServerListFilter<Server> serverListFilter,
			IRule rule, IPing ping, ServerListUpdater serverListUpdater) {
		if (this.propertiesFactory.isSet(ILoadBalancer.class, name)) {
			return this.propertiesFactory.get(ILoadBalancer.class, config, name);
		}
		return new ZoneAwareLoadBalancer<>(config, rule, ping, serverList,
				serverListFilter, serverListUpdater);
	}






1.2 getServers方法返回分析


从NacosNamingService中获取instance, 最后加入到Server的list中。
	private List<NacosServer> instancesToServerList(List<Instance> instances) {
		List<NacosServer> result = new ArrayList<>();
		if (null == instances) {
			return result;
		}
		for (Instance instance : instances) {
			result.add(new NacosServer(instance));
		}
		return result;
	}
通过遍历传入的Instances, 加入至NacosServer队列中。
1.3 通过selectInstances方法查找Instances实例

NacosServerList#getServers() -> NacosNamingService#selectInstances() 3个参数 -> 4个参数 -> 5个参数
 通过参数判断实例是否是安全的, 是否是订阅请求

5个参数的方法去获取到要调用服务的serviceInfo Client获取要调用服务的提供者列表

最后通过selectInstances()两个参数的方法去过滤出所有可用的实例

通过迭代服务的所有instance实例, 判断当前instance是否是不是健康的,或不可用,或其权重小于等于0,则从列表中将其删除
1.4 获取到要调用服务的serviceInfo

此方法之前分析过, 先获取本地的服务。此方法最后有一个定时任务, 去定时更新本地注册表中的当前服务。

创建一个定时异步操作对象,并启动这个定时任务, 将这个定时异步操作对象写入到缓存map。
















