public async Task <List <Instance> > GetAllInstances(string serviceName, string groupName, List <string> clusters, bool subscribe) { ServiceInfo serviceInfo; string clusterString = string.Join(",", clusters); if (subscribe) { serviceInfo = _serviceInfoHolder.GetServiceInfo(serviceName, groupName, clusterString); if (serviceInfo == null) { serviceInfo = await _clientProxy.Subscribe(serviceName, groupName, clusterString).ConfigureAwait(false); } } else { serviceInfo = await _clientProxy.QueryInstancesOfService(serviceName, groupName, clusterString, 0, false).ConfigureAwait(false); } List <Instance> list = serviceInfo.Hosts; if (serviceInfo == null || serviceInfo.Hosts == null || !serviceInfo.Hosts.Any()) { return(new List <Instance>()); } return(list); }
private async Task RunUpdateTask(string serviceName, string groupName, string clusters) { int delayTime = -1; var serviceKey = ServiceInfo.GetKey(NamingUtils.GetGroupedName(serviceName, groupName), clusters); try { if (!changeNotifier.IsSubscribed(groupName, serviceName, clusters) && !_updatingMap.ContainsKey(serviceKey)) { // TODO logger return; } if (!serviceInfoHolder.GetServiceInfoMap().TryGetValue(serviceKey, out var serviceObj)) { serviceObj = await namingClientProxy.QueryInstancesOfService(serviceName, groupName, clusters, 0, false); serviceInfoHolder.ProcessServiceInfo(serviceObj); delayTime = DEFAULT_DELAY; // TODO lastRefTime serviceObj.LastRefTime return; } if (serviceObj.LastRefTime <= 0) { serviceObj = await namingClientProxy.QueryInstancesOfService(serviceName, groupName, clusters, 0, false); serviceInfoHolder.ProcessServiceInfo(serviceObj); } // TODO lastRefTime serviceObj.LastRefTime if (serviceObj.Hosts == null || serviceObj.Hosts.Any()) { // incFailCount return; } delayTime = (int)serviceObj.CacheMillis * DEFAULT_UPDATE_CACHE_TIME_MULTIPLE; // resetFailCount } catch (System.Exception) { // logger } finally { // next } }