コード例 #1
0
        /// <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}服务调用异常");
            }
        }
コード例 #2
0
        /// <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()}");
            }
        }
コード例 #3
0
ファイル: DkmsGateway.cs プロジェクト: SunnyWileLee/SoftLee
        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));
        }
コード例 #4
0
        /// <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}服务调用错误");
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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());
        }
コード例 #8
0
        /// <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}服务调用错误");
            }
        }
コード例 #9
0
        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);
        }