public IActionResult Test()
        {
            string url    = "http://MyServiceA/api/ExternalInterface/get";
            string result = WebApiHelperExtend.InvokeApi(url);

            return(Ok(result));
        }
예제 #2
0
        public void Show()
        {
            Uri uri = new Uri("http://localhost:8500");

            using (ConsulClient consulClient = new ConsulClient(c => c.Address = new Uri("http://localhost:8500"))) {
                Dictionary <string, AgentService> services = consulClient.Agent.Services().Result.Response;
                foreach (var kv in services)
                {
                    Console.WriteLine($"key={kv.Key},{kv.Value.Address},{kv.Value.ID},{kv.Value.Service},{kv.Value.Port}");
                }
                var agentServices = services.Where(s => s.Value.Service.Equals("apiservice1", StringComparison.CurrentCultureIgnoreCase)).Select(s => s.Value);

                var agentService = agentServices.ElementAt(Environment.TickCount % agentServices.Count());
                Console.WriteLine($"key={agentService.Address},{agentService.ID},{agentService.Service},{agentService.Port}");
                var    resultUrl = $"{uri.Scheme}://{agentService.Address}:{agentService.Port}{uri.PathAndQuery}";
                string result    = WebApiHelperExtend.InvokeApi(resultUrl, HttpMethod.Get);
            }


            Uri url = new Uri("http://localhost:8500/");

            using (ConsulClient consul = new ConsulClient(s => s.Address = new Uri("http://localhost:8511"))) {
                Dictionary <string, AgentService> pairs = consul.Agent.Services().Result.Response;
                foreach (var item in pairs)
                {
                }

                var a = pairs.Where(s => s.Value.Service.Equals("aaa", StringComparison.CurrentCultureIgnoreCase)).Select(s => s.Value);
            }
        }
        public ActionResult Get()
        {
            string url    = "http://MyServiceA/api/InternalServerInterface/get";
            string result = WebApiHelperExtend.InvokeApi(url);

            result += "After the internal interface is requested, it will be  returned to the TestApiGatewayDemo";
            return(Ok(result));
        }
예제 #4
0
        /// <summary>
        /// consul发现
        /// </summary>
        /// <returns></returns>
        public IActionResult Index()
        {
            #region 直接调用服务
            #endregion


            #region 客户端发现consul,不属于服务调用

            using (ConsulClient client = new ConsulClient(c => {
                c.Address = new Uri("http://129.28.178.153:8500/");
                //c.Address = new Uri("http://localhost:8500/");
                c.Datacenter = "dc1";
            }))
            {
                var    dictionary = client.Agent.Services().Result.Response;
                string message    = "";
                foreach (var keyValuePair in dictionary)
                {
                    AgentService agentService = keyValuePair.Value;
                    message += $"{agentService.Address}:{agentService.Port}\n";
                }
                base.ViewBag.Message = message;
            }

            #endregion


            #region 调用,负载均衡

            string url       = "http://ConsulTestServiceGroup:8500/api/User/GetUsers";
            Uri    uri       = new Uri(url);
            string groupName = uri.Host;
            using (ConsulClient client = new ConsulClient(c => {
                c.Address = new Uri("http://129.28.178.153:8500");
                c.Datacenter = "dc1";
            })) {
                var dictionary = client.Agent.Services().Result.Response;
                var list       = dictionary.Where(k => k.Value.Service.Equals(groupName,
                                                                              StringComparison.OrdinalIgnoreCase));
                KeyValuePair <string, AgentService> keyValuePair = new KeyValuePair <string, AgentService>();
                keyValuePair = list.First();
                var resultUrl = $"{uri.Scheme}://{keyValuePair.Value.Address}:" +
                                $"{keyValuePair.Value.Port}{uri.PathAndQuery}";
                string result = WebApiHelperExtend.InvokeApi(resultUrl);
            }



            #endregion

            return(View());
        }
예제 #5
0
        public IActionResult Info()
        {
            List <SysUser> userList  = new List <SysUser>();
            string         resultUrl = null;

            #region 直接调用
            {
                string url    = "http://localhost:5726/api/users/get";
                string result = WebApiHelperExtend.InvokeApi(url);
                userList  = Newtonsoft.Json.JsonConvert.DeserializeObject <List <SysUser> >(result);
                resultUrl = url;
            }
            #endregion

            base.ViewBag.Users = userList;
            base.ViewBag.Url   = resultUrl;
            return(View());
        }
        public IActionResult Info()
        {
            List <Users> userList  = new List <Users>();
            string       resultUrl = null;

            #region 直接调用
            {
                //string url = "http://localhost:5726/api/users/get";
                //string result = WebApiHelperExtend.InvokeApi(url);
                //userList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Users>>(result);
                //resultUrl = url;
            }
            #endregion

            #region 这么多地址你怎么管理?1 2 3 要累死--可以自行选择

            #endregion

            #region 通过consul去发现这些服务地址
            {
                //using (ConsulClient client = new ConsulClient(c =>
                //{
                //    c.Address = new Uri("http://localhost:8500/");
                //    c.Datacenter = "dc1";
                //}))
                //{
                //    var dictionary = client.Agent.Services().Result.Response;
                //    string message = "";
                //    foreach (var keyValuePair in dictionary)
                //    {
                //        AgentService agentService = keyValuePair.Value;
                //        this._logger.LogWarning($"{agentService.Address}:{agentService.Port} {agentService.ID} {agentService.Service}");//找的是全部服务 全部实例  其实可以通过ServiceName筛选
                //        message += $"{agentService.Address}:{agentService.Port};";
                //    }
                //    //获取当前consul的全部服务
                //    base.ViewBag.Message = message;
                //}
            }
            #endregion

            #region 调用---负载均衡
            {
                //string url = "http://localhost:5726/api/users/get";
                //string url = "http://localhost:5727/api/users/get";
                //string url = "http://localhost:5728/api/users/get";
                string url = "http://ZhaoxiUserService/api/users/get";
                //consul解决使用服务名字 转换IP:Port----DNS

                Uri    uri       = new Uri(url);
                string groupName = uri.Host;
                using (ConsulClient client = new ConsulClient(c =>
                {
                    c.Address = new Uri("http://localhost:8500/");
                    c.Datacenter = "dc1";
                }))
                {
                    var dictionary = client.Agent.Services().Result.Response;
                    var list       = dictionary.Where(k => k.Value.Service.Equals(groupName, StringComparison.OrdinalIgnoreCase));//获取consul上全部对应服务实例
                    KeyValuePair <string, AgentService> keyValuePair = new KeyValuePair <string, AgentService>();
                    //拿到3个地址,只需要从中选择---可以在这里做负载均衡--
                    //{
                    //    keyValuePair = list.First();//直接拿的第一个
                    //}
                    //{
                    //    var array = list.ToArray();
                    //    //随机策略---平均策略
                    //    keyValuePair = array[new Random(iSeed++).Next(0, array.Length)];
                    //}
                    //{
                    //    var array = list.ToArray();
                    //    //轮询策略---平均策略
                    //    keyValuePair = array[iSeed++ % array.Length];
                    //}
                    {
                        //权重---注册服务时指定权重,分配时获取权重并以此为依据
                        List <KeyValuePair <string, AgentService> > pairsList = new List <KeyValuePair <string, AgentService> >();
                        foreach (var pair in list)
                        {
                            int count = int.Parse(pair.Value.Tags?[0]);
                            for (int i = 0; i < count; i++)
                            {
                                pairsList.Add(pair);
                            }
                        }
                        keyValuePair = pairsList.ToArray()[new Random(iSeed++).Next(0, pairsList.Count())];
                    }
                    resultUrl = $"{uri.Scheme}://{keyValuePair.Value.Address}:{keyValuePair.Value.Port}{uri.PathAndQuery}";
                    string result = WebApiHelperExtend.InvokeApi(resultUrl);
                    userList = Newtonsoft.Json.JsonConvert.DeserializeObject <List <Users> >(result);
                }
            }
            #endregion
            base.ViewBag.Users = userList;
            base.ViewBag.Url   = resultUrl;
            return(View());
        }
        public IActionResult Info()
        {
            List <Users> userList  = new List <Users>();
            string       resultUrl = null;

            #region 直接调用
            {
                string url    = "http://localhost:5726/api/users/get";
                string result = WebApiHelperExtend.InvokeApi(url);
                userList  = Newtonsoft.Json.JsonConvert.DeserializeObject <List <Users> >(result);
                resultUrl = url;
            }
            #endregion
            #region 这么多地址你怎么管理?1 2 3 要累死--可以自行选择

            #endregion

            #region 通过consul去发现这些服务地址
            {
                using (ConsulClient client = new ConsulClient(c =>
                {
                    c.Address = new Uri("http://localhost:8500/");
                    c.Datacenter = "dc1";
                }))
                {
                    var    dictionary = client.Agent.Services().Result.Response;
                    string message    = "";
                    foreach (var keyValuePair in dictionary)
                    {
                        AgentService agentService = keyValuePair.Value;
                        this._logger.LogWarning($"{agentService.Address}:{agentService.Port} {agentService.ID} {agentService.Service}");//找的是全部服务 全部实例  其实可以通过ServiceName筛选
                        message += $"{agentService.Address}:{agentService.Port};";
                    }
                    //获取当前consul的全部服务
                    base.ViewBag.Message = message;
                }
            }
            #endregion

            #region 调用---负载均衡
            {
                //string url = "http://localhost:5726/api/users/get";
                //string url = "http://localhost:5727/api/users/get";
                //string url = "http://localhost:5728/api/users/get";
                string url = "http://ZhaoxiUserService/api/users/get";
                //consul解决使用服务名字 转换IP:Port----DNS

                Uri    uri       = new Uri(url);
                string groupName = uri.Host;

                using (ConsulClient client = new ConsulClient(c =>
                {
                    c.Address = new Uri("http://localhost:8500/");
                    c.Datacenter = "dc1";
                }))
                {
                    var dictionary = client.Agent.Services().Result.Response;
                    var list       = dictionary.Where(k => k.Value.Service.Equals(groupName, StringComparison.OrdinalIgnoreCase));
                    KeyValuePair <string, AgentService> keyValuePair = new KeyValuePair <string, AgentService>();
                }
            }
            #endregion

            base.ViewBag.Users = userList;
            base.ViewBag.Url   = resultUrl;
            return(View());
        }