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