微服务之注册服务与发现:Consul在Windows下安装使用 1、下载和安装 2、注册服务与发现 3、客户端调用

微服务之注册服务与发现:Consul在Windows下安装使用
1、下载和安装
2、注册服务与发现
3、客户端调用

下载地址:https://www.consul.io/downloads.html

在解压目录运行cmd命令:

consul agent -dev

 当出现如下界面表示启动成功:

微服务之注册服务与发现:Consul在Windows下安装使用
1、下载和安装
2、注册服务与发现
3、客户端调用

访问http://localhost:8500/即可进入ui控制界面

微服务之注册服务与发现:Consul在Windows下安装使用
1、下载和安装
2、注册服务与发现
3、客户端调用

  当然,也可以添加一下环境变量,下次直接打开cmd就可以启动sonsul了。

微服务之注册服务与发现:Consul在Windows下安装使用
1、下载和安装
2、注册服务与发现
3、客户端调用

2、注册服务与发现

 2.1新增注册类

public class ConsulRegister
    {
        private IConfiguration _configuration;
        private IHostApplicationLifetime _lifetime;
        public ConsulRegister(IConfiguration configuration, IHostApplicationLifetime lifetime)
        {
            this._configuration = configuration;
            this._lifetime = lifetime;
        }
        public void Regist()
        {

            String ip = _configuration["ip"];//部署到不同服务器的时候不能写成127.0.0.1或者0.0.0.0,因为这是让服务消费者调用的地址
            int port = int.Parse(_configuration["port"]);//获取服务端口 命令行参数
            Console.WriteLine($"http://{ip}:{port}/api/Health/index");
            var client = new ConsulClient(ConfigurationOverview); //回调获取
            string serverId = "ServerNameFirst-" + Guid.NewGuid();//服务编号保证不重复
            var result = client.Agent.ServiceRegister(new AgentServiceRegistration()
            {
                ID = serverId,
                Name = "BaseDataServer",//服务的名称
                Address = ip,//服务ip地址
                Port = port,//服务端口
                Check = new AgentServiceCheck //健康检查
                {
                    DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后反注册
                    Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔,或者称为心跳间隔(定时检查服务是否健康)
                    HTTP = $"http://{ip}:{port}/api/Health/Index",//健康检查地址
                    Timeout = TimeSpan.FromSeconds(5)//服务的注册时间
                }
            });
            _lifetime.ApplicationStopping.Register(() =>
            {
                Console.WriteLine($"服务停止{ip}:{port}");
                client.Agent.ServiceDeregister(serverId).Wait();
            });
        }
        private static void ConfigurationOverview(ConsulClientConfiguration obj)
        {
            //consul的地址
            obj.Address = new Uri("http://127.0.0.1:8500");
            //数据中心命名
            obj.Datacenter = "UserCenter";
        }
    }

2.2在程序启动时候调用

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
        {
            //忽略其他代码
            //程序启动时候调用注册类
            new ConsulRegister(Configuration, lifetime).Regist();
             
        }

2.3启动服务

在bin目录下分别执行三个命令,启动三个服务

dotnet MicroService.dll --urls="http://*:5210" --ip="127.0.0.1" --port 5210

dotnet MicroService.dll --urls="http://*:5211" --ip="127.0.0.1" --port 5211

dotnet MicroService.dll --urls="http://*:5212" --ip="127.0.0.1" --port 5212

consul就可以顺利发现服务,到此为止,服务端就已经配置完毕。

微服务之注册服务与发现:Consul在Windows下安装使用
1、下载和安装
2、注册服务与发现
3、客户端调用

如果服务有异常,可以通过该地址检查错误:http://localhost:8500/v1/agent/checks。

3、客户端调用

 新建控制台应用程序,并添加代码:

 class Program
    {
        static List<string> Urls = new List<string>();
        static void Main(string[] args)
        {
            Console.WriteLine("开始输出当前所有服务地址");
            Catalog_Nodes().GetAwaiter().GetResult();

            for (int i = 0; i < 15; i++)
            {
                Console.WriteLine("开始随机请求一个地址服务地址");
                int index = new Random().Next(Urls.Count);
                string url = Urls[index];

                Console.WriteLine("请求的随机地址:" + url);
                var result = new HttpClient().GetAsync(url).Result;
                Console.WriteLine($"{result.StatusCode}:{result.Content.ReadAsStringAsync().Result}");
            }
           
            Console.ReadLine();
        }
        public static async Task Catalog_Nodes()
        {
            var client = new ConsulClient();
            var nodeList = await client.Agent.Services();
            var url = nodeList.Response.Values;

            foreach (var item in url)
            {
                string Address = item.Address;
                int port = item.Port;
                string name = item.Service;
                Console.WriteLine($"地址:{Address}:{port},name:{name}");
                Urls.Add($"http://{Address}:{port}/api/Users/GetList");
            }
        }
    }

运行结果:

微服务之注册服务与发现:Consul在Windows下安装使用
1、下载和安装
2、注册服务与发现
3、客户端调用

这样就完成了注册服务与发现及客户端的调用。

需要查看consul+ocelot联合实现集群的请点击:https://www.cnblogs.com/chenxizhaolu/p/13896843.html

相关参考:

https://www.cnblogs.com/yanbigfeg/p/9199590.html

https://www.cnblogs.com/jpfss/p/11585255.html