先思考一些問題:它是做什麼的、以及怎麼使用它。帶著這些問題往下走。
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也自動註冊進入了這個分組。
因為時間關係,今天只能寫到這裡了,還有很多東西沒有寫,服務呼叫、健康檢查什麼的,我會盡快再發文的。