/// <summary> /// 根据服务名获取服务地址 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public RpcService GetRpcService(string serviceName) { using (var consul = BuildConsul()) { //如果没有就直接随机Consul中取出的健康服务 var discoveredServices = consul.Health.Service(serviceName, "", true).ConfigureAwait(false).GetAwaiter().GetResult().Response.Select(t => t.Service).ToList();//获取健康的服务 var services = new List <RpcService>(); foreach (var discoveredService in discoveredServices) { var service = new RpcService() { Name = discoveredService.Service, Host = discoveredService.Address, Port = discoveredService.Port, Protocol = ServiceProtocol.Http }; if (discoveredService.Tags != null && discoveredService.Tags.Any(t => t.Equals(ServiceProtocol.Tcp.ToString()))) { service.Protocol = ServiceProtocol.Tcp; } services.Add(service); } return(_loadBalancer.GetService(services)); }; }