/// <summary> /// 依据服务和负载均衡策略查找可调用的服务 /// </summary> /// <param name="service"></param> /// <param name="serviceName">要查找的服务名称</param> /// <param name="balanceMethd">所用的负载均衡算法</param> /// <param name="httpclientName">polly客户端名称,除非存在多个,否则用more你的就好</param> /// <returns></returns> public static async Task <HttpClient?> Find(this IConsulDiscoveryService service, string serviceName, LoadBalanceMethod balanceMethd = LoadBalanceMethod.Random, string httpclientName = "micro") { if (string.IsNullOrEmpty(serviceName)) { throw new ArgumentException("message", nameof(serviceName)); } try { var factory = service.ServiceProvider.GetService <IHttpClientFactory>(); var cataglog = await service.FindBalance(balanceMethd, serviceName); if (cataglog != null) { var client = factory.CreateClient(httpclientName ?? "micro"); client.BaseAddress = new Uri(cataglog.ServiceAddress + ":" + cataglog.ServicePort); return(client); } else { return(null); } } catch (Exception err) { Debug.WriteLine(err.Message); return(null); } }