在Windows 下如何使用 AspNetCore Api 和 consul


一、概念:什么consul:

 Consul 有多個組件組成一個整體,作用和Eureka,Zookeeper相當,都是用來做服務的發現與治理。

 

Consul特性:

          1、 服務的發現consul可以把注冊其中的服務提供給使用者,也可以主動發現服務consul客戶端界面中用戶可以得到,服務的信息,比如IP端口等信息,在客戶端界面中可以很容易的找到注冊的服務,

          2、 健康檢查這里健康檢查就是檢查服務是否良好的運行,這里判斷服務是否運行良好,可以用Web服務的狀態進行判斷,也可以用服務器的利用狀態進行判斷,可以根據這些狀態來判斷那些服務是良好運行的那些不健康的()這里不健康可以服務器的利用從而根據這些判斷路由遠離不健康的服務。

         3、 KVStore就是KEY/Value存儲在使用中可以根據KV的存儲功能做很多事情比如,動態的進行配置,進行一些特征的標記協調,管理的選舉KV存儲API是基於HTTP的

         4、 多數據中心consul支持多哦數據中心,意味着我們這是用consul過程中不必擔心多做更多的工作來進行擴展。

 

        Consul是一個分布式的高可用的系統。每一個向consul注冊的的服務,在服務無本身都會運行一個agents)代理運行代理的最終目的是為了對當前服務進行健康檢查,以便通知Consul系統,當前節點的健康與否,consul的特性(健康檢查我們已經舉過例子。

        每個數據中心運行一個領事服務器集群。當提出跨數據中心服務發現或配置請求時,本地(agents)服務器將請求轉發到遠程數據中心並返回結果。

 

     (白話)進行健康檢查就是為了決定能不能用這個節點服務這個節點的服務是否是所有已知節點中性能最好的,不是最好的換一個就是了。在使用的過程中每一個服務器運行時建議模擬出多個可以導致服務失敗數據丟失的場景然后為每一個服務推薦用作安全的服務器。在這個過程中有一個最大的功臣就是代理agents代理實現了和服務器之間的交流

了解更多:https://www.consul.io/intro/index.html

 

二、Consul安裝:

 

  1、 Consul下載:

 

    地址 https://www.consul.io/

 

     

        點擊DOWNLOAO 進入下載頁面如下

         

        我下載的是win版本並且已解壓,大小非常的小

        

 

  2、安裝運行:

    安裝命令為:Consul.exe agent -dev   開發者模式安裝   Ctrl+ C 可以停止運行 如下圖

   

        

             開發者模式安裝只適用於單個服務器的環境,不用於生產,開發者模式不保存任何的狀態。

 

    安裝成功后,我們可以看到,輸出的日志信息中包含了。Client addr: 客戶端地址為,127.0.0.1:8500DNS8600 我們可以在瀏覽器中進行訪問,

    訪問結果如下:

    

    在頁面中我們可以看到我們的服務、 consul 在會默認把自己注冊成為一個服務節點,界面中向我們展示了自己的運行狀態,IP服務器等信息

    我們還可以通過命令來進行查看 服務的信息

    命令: consul members 下圖是輸出:

     

 

    圖中向我們輸出了我們自己更加詳細的信息,地址、狀態、角色、版本信息

    在后期我們使用的過程中我們會添加很多的服務,這個時候的輸出可能更多,因為服務的信息是通過通訊協議獲取以及注冊的,為了避免consul視圖中的服務狀態,和服務器上的狀態保持一致,就需要通過HttpApi將服務的狀態發送給consul中的管理(agent) 結合上文中consul的特性3KVStore我們可以更好的理解。

    官方翻譯

 

    中斷代理之后,您應該看到它離開集群並關閉。通過優雅地離開,領事通知其他集群成員節點已離開。如果您強制終止代理進程,集群的其他成員將檢測到節點失敗。當成員離開時,其服務和檢查將從目錄中刪除。當一個成員失敗時,它的健康狀態被簡單地標記為關鍵,但它不會從目錄中刪除。領事將自動嘗試重新連接到失敗的節點,允許它從某些網絡條件中恢復,而不再與左側節點聯系。此外,如果代理作為服務器運行,那么優雅的休假對於避免可能導致影響協商一致協議的可用性中斷非常重要。

 

 

 三、Consul的簡單使用:

     1、新建一個AspNetCoreAPI項目:

      如下圖:

         

    2、在項目中的Startup中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",//服務的名稱
                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)//服務的注冊時間
                }
            });
        }
View Code

 

/// <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";
        }
View Code

 

 

 3、啟動:首先確保Consul已啟動,我們運行項目注冊

     

    步驟如下:

            編譯Api 成功后我們通過命令行的方式運行:

                 執行命令:dotnet 項目DLL --ip 設置ip -- port 設置端口(dotnet Framework.WebApi.dll --ip 127.0.0.1 --port 5001)  敲擊回車運行項目

              同一個項目我們可以運行多個在命令運行時設置不同端口就可以運行了

                                         

            

            刷新consul客戶端我們可以看到我們的服務注冊成功了

            結果如下:

             

 

 

文章參考:如鵬網楊中科老師的AspNetCore 微服務普及推廣內容:

              有不足之處 希望大家指出相互學習

 


免責聲明!

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



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