.Net Core微服務——服務發現:Consul(一)

Max發表於2021-07-17

先思考一些問題:它是做什麼的、以及怎麼使用它。帶著這些問題往下走。

consul是做什麼的

consul用於微服務下的服務治理。服務治理是什麼?它包含但不限於:服務發現、服務配置、健康檢查、鍵值儲存、安全服務通訊、多資料中心等。

為什麼需要服務治理?舉個例子:最開始的服務比較簡單,各服務之間通過API就能訪問。後面業務複雜了,服務也跟著複雜了,搞分散式了,而分散式又必然是多伺服器部署,這就有一個問題:如果服務之間還是用API訪問,那某個服務所在的伺服器掛掉以後這個服務就不能用了,也不能自動轉移,那麼只能人肉運維了。這時候大家在想:如果下游呼叫上游,只需要一個統一的地址,不用關注負載均衡、節點失效之類的問題,也不用關注可用性,這些都有一箇中介軟體來完成,那該有多好。這個中介軟體要做的事情,就是服務治理,也就是本文的consul,它就是解決這個事的。但其實也不是隻有它能做這個事,zooKeeper、etcd也能做這個事,也沒有什麼高下之分,用什麼主要看自己,看公司。對自己來說,哪個摸得透、玩的熟就用哪個。對公司來說,哪個市場認可度高就用哪個,說白了就是哪個用的人多。用的人多會的人就多,招人換人速度就快了,網際網路企業追求的不就是速度麼?“時間就是金錢,效率就是生命”,這句話早期在深圳隨處可見,至今仍然適用。

題外話有點多,接著往下走。

怎麼使用consul

這裡只講docker內的consul。首先下載一個映象:

dokcer pull consul

然後執行起來:

docker run -itd -p 8700:8500 --name myconsuldemo consul

成功執行後能看到如下頁面:

 tips:consul的預設埠是8500,docker啟動可以對映到任意埠。

 服務註冊

服務發現的概念,簡單來說就是所有節點程式啟動時都去consul註冊一下,註冊後的資訊統一儲存在consul中以供呼叫。是不是很簡單?

現在net core 3.1下完成consul服務註冊。

首先需要新增nuget包:

 然後自行封裝一個註冊服務,節省時間先上原始碼:

        public static void Reg(IConfiguration configuration)
        {
            string ip = configuration.GetSection("ip").Value.ToString();

            string port = configuration.GetSection("port").Value.ToString();

            string weight = configuration.GetSection("weight").Value.ToString();

            string address = configuration.GetSection("address").Value.ToString();//consul的啟動地址

            string center = configuration.GetSection("center").Value.ToString();//資料中心名稱

            ConsulClient client = new ConsulClient(x =>
            {
                x.Address = new Uri(address);
                x.Datacenter = center;
            });

            client.Agent.ServiceRegister(new AgentServiceRegistration()
            {
                ID = $"server {ip}:{port}",
                Name = "shenzhen-ma",//分組名稱
                Address = ip,
                Port = int.Parse(port)
            });
        }

配置檔案:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ip": "127.0.0.1",
  "port": 5100,
  "weight": 1,//權重,負載均衡的重要引數
  "address": "http://127.0.0.1:8700",//consul地址
  "center": "dc1"//資料中心
}

最後,這個服務需要在程式啟動的時候呼叫,只一次就好。直接把呼叫放在startup裡就好,這樣程式啟動的時候就會自動註冊一個服務。

為了能夠動態修改配置檔案,接下來通過控制檯啟動程式:

dotnet run --urls="http://*:5000" --ip="127.0.0.1" --port=5000

啟動成功以後,轉到consul的ui看一下:

 能看到多了一個分組【shenzhen-ma】,點進去看下我們的服務:

 127.0.0.1:5000,沒毛病。這時候模擬一下多節點,再多啟動兩個程式試試看:

 5001,5002也自動註冊進入了這個分組。

因為時間關係,今天只能寫到這裡了,還有很多東西沒有寫,服務呼叫、健康檢查什麼的,我會盡快再發文的。

相關文章