private List <string> GetAvailableInstances
            (AppInfoQueryResponseType appInfo, IDynamicConfigProvider provider, SoaInfo soaInfo)
        {
            // 如果Soa中没有注册任何实例,那么当前soa服务就不存在可用的实例
            if (soaInfo.RegisteredResources == null || soaInfo.RegisteredResources.Count == 0)
            {
                logger.Warn($"There's no registered instance in current service : {soaInfo.ServiceId}");
                return(null);
            }

            // 如果soa服务对应的app不存在任何实例,那么soa服务也不可以被访问
            if (appInfo.Instances == null || appInfo.Instances.Count == 0)
            {
                logger.Warn($"There's no instance in current app : {appInfo.AppId}");
                return(null);
            }

            List <string> list = new List <string>();

            foreach (var item in soaInfo.RegisteredResources)
            {
                // 根据在Soa中注册的实例Id,在app信息中查找实例是否存在,并且校验实例的状态
                var instance = appInfo.Instances.Find
                                   (p => p.InstanceId.Equals(item.InstanceId, StringComparison.InvariantCultureIgnoreCase));

                if (instance == null)
                {
                    logger.Warn($"Althrough this instances '{item.InstanceId}' was registered in soa service '{soaInfo.ServiceId}'," +
                                $" it is no longer in the app's resource list : {appInfo.AppId}");
                    continue;
                }

                var status = provider.GetIntProperty(item.InstanceId);
                logger.Info($"Instance status : {item.InstanceId}, {status}");

                if (VerifyInstanceStatus(status) == false)
                {
                    continue;
                }
                // 获取实例的具体资源
                var address = $"{instance.ResourceId}:{instance.Port}";
                logger.Info($"Found available instance {item.InstanceId} of {appInfo.AppId} for service : " +
                            $"{soaInfo.ServiceId}, resource : {address}");

                list.Add(address);
            }

            return(list);
        }