微服務之註冊服務與發現:Consul在Windows下安裝使用

1、下載和安裝

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

在解壓目錄運行cmd命令:

consul agent -dev

 當出現如下界面表示啓動成功:

 

 

訪問http://localhost:8500/即可進入ui控制界面

  當然,也可以添加一下環境變量,下次直接打開cmd就可以啓動sonsul了。

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就可以順利發現服務,到此爲止,服務端就已經配置完畢。

 

 

如果服務有異常,可以通過該地址檢查錯誤: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");
            }
        }
    }

 

運行結果:

這樣就完成了註冊服務與發現及客戶端的調用。

相關參考:

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章