在windows下.NET CORE 與Consul簡單使用


0)基本概念

consul常用於服務發現 【微服務】

web_Api

\

   \   ->注冊服務                                          raft選舉leader

-----------------------------------------------------------------——

【Server1】<---------------------->     【Server2】

      |                                       |                     

        \                                 /                             

           \                        /                                   

              【Server3】                                       
-----------------------------------------------------------------——

\

   \->發現服務

1)下載

https://www.consul.io/   注意系統版本

2)設置環境變量

拷貝.exe對應的文件路徑 放到環境變量path中

3)cmd中啟動服務   -dev 表示默認

consul agent -dev 

建立集群使用 同一服務器下解決端口占用問題時只能用相同端口注冊一個服務

方式一、

pc-1  【ip:192.168.109.1】

consul agent -server -ui -bootstrap-expect=2 -data-dir=e:\consul -node=consul-1 -client=0.0.0.0 -bind=192.168.109.1 -datacenter=dc1

pc-2 【ip:192.168.109.128】

consul agent -server -ui -bootstrap-expect=2  -data-dir=c:\consul -node=consul-2 -client=0.0.0.0 -bind=192.168.109.128  -datacenter=dc1  -join 192.168.109.1

方式二、

4)打開vs

5)新建web api項目

6)在Startup.cs下修改Configure函數如下

   public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
            String ip = Configuration["ip"];//部署到不同服務器的時候不能寫成127.0.0.1或者0.0.0.0,因為這是讓服務消費者調用的地址
            int port = int.Parse(Configuration["port"]);//獲取服務端口
            var client = new ConsulClient(ConfigurationOverview); //回調獲取
            var result = client.Agent.ServiceRegister(new AgentServiceRegistration()
            {
                ID = "ServerNameFirst" + Guid.NewGuid(),//服務編號保證不重復
                Name = "ServerFirst",//服務的名稱 集群使用consul
                Address = ip,//服務ip地址
                Port = port,//服務端口
                Check = new AgentServiceCheck //健康檢查
                {
                    DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服務啟動多久后反注冊
                    Interval = TimeSpan.FromSeconds(10),//健康檢查時間間隔,或者稱為心跳間隔(定時檢查服務是否健康)
                    HTTP = $"http://{ip}:{port}/api/Health",//健康檢查地址
                    Timeout = TimeSpan.FromSeconds(5)//服務的注冊時間
                }
            });
        }
 /// <summary>
        /// 獲取Consul的實例
        /// </summary>
        /// <param name="obj"></param>
        private static void ConfigurationOverview(ConsulClientConfiguration obj)
        {
            //consul的地址
            obj.Address = new Uri("http://127.0.0.1:8500");
            //數據中心命名
            obj.Datacenter = "dc1";
        }

7)設置健康檢查控制器HealthController.cs

    [Route("api/[controller]")]
    public class HealthController : Controller
    {
        [HttpGet]
        public IActionResult Get() => Ok("ok");
    }

 

8)生成項目

9)打開項目對應文件夾 ->bin->Debug->netcoreapp2.0   路徑上輸入cmd 直接進入對應目錄並打開cmd

10)運行命令進行服務注冊   dotnet PeerApi.dll --ip localhost --port 14446      解釋:PeerApi.dll替換成你的dll    localhost代替ip地址  注意:如果未放在iis上 輸入localhost代替127.0.0.1 其他ip地址不變  14446 是端口號 替換你的端口

11)打開 http://localhost:8500/ui/dc1/services  【consul自帶的監控頁面】  可以查看到具體注冊的服務

12)服務發現  可以查看鏈接

http://127.0.0.1:8500/v1/catalog/service/ServerFirst  【ServerFirst 為服務名稱】


免責聲明!

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



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