[Nacos] Nacos Client获取调用服务的提供者列表 (四)

文章目录

      • 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。

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: