先思考一些問題:它是做什么的、以及怎么使用它,帶著這些問題往下走,
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也自動注冊進入了這個分組,
因為時間關系,今天只能寫到這里了,還有很多東西沒有寫,服務呼叫、健康檢查什么的,我會盡快再發文的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/289111.html
標籤:.NET Core
上一篇:UWP 寫入圖片 Exif 資訊
