微服務之注冊服務與發現: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");
            }
        }
    }

 

運行結果:

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

需要查看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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM