/// <summary> /// 服务请求 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="serviceScheme">服务名称:(http/https)</param> /// <param name="serviceName">服务名称</param> /// <param name="requirePath">服务路径</param> /// <returns></returns> public async Task <T> GetAsync <T>(string serviceScheme, string serviceName, string requirePath) { // 1. 获取服务 var serviceList = await _serviceDiscovery.Discovery(serviceName); if (serviceList == null || serviceList.Count == 0) { throw new Exception($"没有找到 {serviceName} 的可用服务。"); } // 2. 负载均衡服务 var service = _loadBalance.Select(serviceList); // 3. 请求服务 var httpClient = _httpClientFactory.CreateClient("ConsulHttpClient"); //var response = await httpClient.GetAsync($"{service.Url}{requirePath}");//TODO:Ocelot结合Consul会出错,注意Scheme. var response = await httpClient.GetAsync($"{serviceScheme}://{service.Url}{requirePath}"); // 3.1 响应结果,json转换为对象 if (response.StatusCode == HttpStatusCode.OK) { var json = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <T>(json); return(result); } else { throw new Exception($"{serviceName}服务调用异常"); } }
/// <summary> /// Get方法 /// </summary> /// <typeparam name="T"></typeparam> /// param name="ServiceSchme">服务名称:(http/https)</param> /// <param name="ServiceName">服务名称</param> /// <param name="serviceLink">服务路径</param> /// <returns></returns> public async Task <T> GetAsync <T>(string Serviceshcme, string ServiceName, string serviceLink) { // 1、获取服务 IList <ServiceUrl> serviceUrls = await serviceDiscovery.Discovery(ServiceName); // 2、负载均衡服务 ServiceUrl serviceUrl = loadBalance.Select(serviceUrls); // 3、建立请求 Console.WriteLine($"请求路径:{Serviceshcme} +'://'+{serviceUrl.Url} + {serviceLink}"); HttpClient httpClient = httpClientFactory.CreateClient("mrico"); // HttpResponseMessage response = await httpClient.GetAsync(serviceUrl.Url + serviceLink); HttpResponseMessage response = await httpClient.GetAsync(Serviceshcme + "://" + serviceUrl.Url + serviceLink); // 3.1json转换成对象 if (response.StatusCode == HttpStatusCode.OK) { string json = await response.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <T>(json)); } else { // 3.2、进行自定义异常处理,这个地方进行了降级处理 throw new Exception($"{ServiceName}服务调用错误:{response.Content.ReadAsStringAsync()}"); } }
public HttpResponseMessage Invoke(HttpRequestMessage request) { var route = _dkmsRouter.Route(request); var services = _serviceDiscovery.Discovery(route.Service); var service = services.FirstOrDefault(); var url = $"http://{service.Host}/{service.Service}"; var result = _messageTransferProxy.Transger(url, request); return(request.CreateResponse(HttpStatusCode.OK, result)); }
/// <summary> /// Get 方法 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="serviceSchme">服务名称(http/https)</param> /// <param name="serviceName">服务名称</param> /// <param name="serviceLink">服务路径</param> /// <returns></returns> public async Task <T> GetAsync <T>(string serviceSchme, string serviceName, string serviceLink , Func <T, T> filterFunc = null) { //获取服务 IList <ServiceUrl> serviceUrls = await _serviceDiscovery.Discovery(serviceName); //负载均衡服务 ServiceUrl serviceUrl = _loadBalance.Select(serviceUrls); //建立请求 HttpClient httpClient = _httpClientFactory.CreateClient("fcdtwin"); HttpResponseMessage httpResponse = await httpClient.GetAsync(serviceUrl.Url + serviceLink); //json转换成对象 if (httpResponse.StatusCode == HttpStatusCode.OK) { string json = await httpResponse.Content.ReadAsStringAsync(); T data = JsonConvert.DeserializeObject <T>(json); if (filterFunc != null) { data = filterFunc.Invoke(data); } return(data); } else { throw new Exception($"{serviceName}服务调用错误"); } }
public string GetMiddleUrl(string urlScheme, string serviceName) { //1.获取服务url IList <ServiceNode> serviceNodes = _serviceDiscovery.Discovery(serviceName); if (serviceNodes.Count == 0) { throw new FrameException($"{serviceName} 服务不存在"); } //2.url负载均衡 var serviceNode = _loadBalance.Select(serviceNodes); return(urlScheme + "://" + serviceNode.Url); }
public string GetMiddleUrl(string urlShcme, string serviceName) { // 1、获取服务url IList <ServiceNode> serviceUrls = serviceDiscovery.Discovery(serviceName); // 2、url负载均衡 ServiceNode serviceUrl = loadBalance.Select(serviceUrls); // 3、创建url StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(urlShcme); stringBuilder.Append("://"); stringBuilder.Append(serviceUrl.Url); return(stringBuilder.ToString()); }
public string GetMiddleUrl(string urlShcme, string serviceName) { // 1、获取服务url IList <ServiceNode> serviceUrls = serviceDiscovery.Discovery(serviceName); if (serviceUrls.Count == 0) { throw new FrameException($"{serviceName} 服务不存在"); } // 2、url负载均衡 ServiceNode serviceUrl = loadBalance.Select(serviceUrls); // 3、创建url StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(urlShcme); stringBuilder.Append("://"); stringBuilder.Append(serviceUrl.Url); return(stringBuilder.ToString()); }
/// <summary> /// Get方法 /// </summary> /// <typeparam name="T"></typeparam> /// param name="ServiceSchme">服务名称:(http/https)</param> /// <param name="ServiceName">服务名称</param> /// <param name="serviceLink">服务路径</param> /// <returns></returns> public async Task <T> GetAsync <T>(string Serviceshcme, string ServiceName, string serviceLink) { // 1、获取服务 IList <ServiceUrl> serviceUrls = await serviceDiscovery.Discovery(ServiceName); // 2、负载均衡服务 ServiceUrl serviceUrl = loadBalance.Select(serviceUrls); // 3、建立请求 HttpClient httpClient = httpClientFactory.CreateClient("consul"); HttpResponseMessage response = await httpClient.GetAsync(serviceUrl.Url + serviceLink); // 3.1json转换成对象 if (response.StatusCode == HttpStatusCode.OK) { string json = await response.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <T>(json)); } else { throw new Exception($"{ServiceName}服务调用错误"); } }
public async Task <IList <Team> > GetTeams() { // 1、获取服务 IList <ServiceUrl> serviceUrls = await serviceDiscovery.Discovery(ServiceName); // 2、负载均衡服务 ServiceUrl serviceUrl = loadBalance.Select(serviceUrls); // 3、建立请求 HttpClient httpClient = httpClientFactory.CreateClient(); HttpResponseMessage response = await httpClient.GetAsync(serviceUrl.Url + serviceLink); // 3.1json转换成对象 IList <Team> teams = null; if (response.StatusCode == HttpStatusCode.OK) { string json = await response.Content.ReadAsStringAsync(); teams = JsonConvert.DeserializeObject <List <Team> >(json); } return(teams); }