.Net?Core服務治理Consul使用服務發(fā)現(xiàn)
先思考一些問題:它是做什么的、以及怎么使用它。帶著這些問題往下走。
consul是做什么的
consul用于微服務下的服務治理。服務治理是什么?它包含但不限于:服務發(fā)現(xiàn)、服務配置、健康檢查、鍵值存儲、安全服務通信、多數(shù)據(jù)中心等。
為什么需要服務治理?舉個例子:最開始的服務比較簡單,各服務之間通過API就能訪問。后面業(yè)務復雜了,服務也跟著復雜了,搞分布式了,而分布式又必然是多服務器部署,這就有一個問題:如果服務之間還是用API訪問,那某個服務所在的服務器掛掉以后這個服務就不能用了,也不能自動轉移,那么只能人肉運維了。這時候大家在想:如果下游調用上游,只需要一個統(tǒng)一的地址,不用關注負載均衡、節(jié)點失效之類的問題,也不用關注可用性,這些都有一個中間件來完成,那該有多好。這個中間件要做的事情,就是服務治理,也就是本文的consul,它就是解決這個事的。但其實也不是只有它能做這個事,zooKeeper、etcd也能做這個事,也沒有什么高下之分,用什么主要看自己,看公司。對自己來說,哪個摸得透、玩的熟就用哪個。對公司來說,哪個市場認可度高就用哪個,說白了就是哪個用的人多。用的人多會的人就多,招人換人速度就快了,互聯(lián)網(wǎng)企業(yè)追求的不就是速度么?“時間就是金錢,效率就是生命”,這句話早期在深圳隨處可見,至今仍然適用。
題外話有點多,接著往下走。
怎么使用consul
這里只講docker內的consul。首先下載一個鏡像:
dokcer pull consul
然后運行起來:
docker run -itd -p 8700:8500 --name myconsuldemo consul
成功運行后能看到如下頁面:

tips:consul的默認端口是8500,docker啟動可以映射到任意端口。
服務注冊
服務發(fā)現(xiàn)的概念,簡單來說就是所有節(jié)點程序啟動時都去consul注冊一下,注冊后的信息統(tǒng)一保存在consul中以供調用。是不是很簡單?
現(xiàn)在net core 3.1下完成consul服務注冊。
首先需要添加nuget包:

然后自行封裝一個注冊服務,節(jié)省時間先上源碼:
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();//數(shù)據(jù)中心名稱
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,//權重,負載均衡的重要參數(shù)
"address": "http://127.0.0.1:8700",//consul地址
"center": "dc1"http://數(shù)據(jù)中心
}最后,這個服務需要在程序啟動的時候調用,只一次就好。直接把調用放在startup里就好,這樣程序啟動的時候就會自動注冊一個服務。
為了能夠動態(tài)修改配置文件,接下來通過控制臺啟動程序:
dotnet run --urls="http://*:5000" --ip="127.0.0.1" --port=5000
啟動成功以后,轉到consul的ui看一下:

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

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

5001,5002也自動注冊進入了這個分組。
因為時間關系,今天只能寫到這里了,還有很多東西沒有寫,服務調用、健康檢查什么的,我會盡快再發(fā)文的。
到此這篇關于.Net Core服務治理Consul使用服務發(fā)現(xiàn)的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
ASP.NET MVC Bundles 用法和說明(打包javascript和css)
本文主要介紹了ASP.NET MVC中的新功能Bundles,利用Bundles可以將javascript和css文件打包壓縮,并且可以區(qū)分調試和非調試,在調試時不進行壓縮,以原始方式顯示出來,以方便查找問題。2016-04-04
在ASP.NET 2.0中操作數(shù)據(jù)之十二:在GridView控件中使用TemplateField
本文主要講解在GridView控件中如何使用TemplateField,從而更加高級的自定義GridView,實現(xiàn)自定義列表的功能。2016-05-05
基于.net開發(fā)的遵循web標準的個人站點程序包下載
基于.net開發(fā)的遵循web標準的個人站點程序包下載...2006-10-10
在ASP.NET 2.0中操作數(shù)據(jù)之六十八:為DataTable添加額外的列
本文介紹并使用TableAdapter向DataTable添加新的一列的方法和步驟,任何時候只要重新運行TableAdapter設置向導,用戶所做的所有定制都要被覆蓋,為避免出現(xiàn)這種情況,我們建議直接修改存儲過程。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之六十九:處理Computed Columns列
SQL Server創(chuàng)建表的時候允許我們創(chuàng)建computed columns列,這種列的值源與表達式,并且是只讀的,所以我們不能通過Insert和Update為其賦值,本文具體講解創(chuàng)建和調用顯示的方法和步驟。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之五十二:使用FileUpload上傳文件
本文主要介紹ASP.NET中為了演示上傳文件,我們在數(shù)據(jù)庫上建了兩個字段,分別存儲二進制圖片和PDF路徑,然后介紹了如何使用FileUpload 完成上傳文件。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之五十一:從GridView的頁腳插入新記錄
本文介紹在ASP.NET 2.0中如何在GridView的頁腳動態(tài)插入一行新記錄,要顯示頁腳行只需要設置ShowFooter屬性為true。我們可以這樣對頁腳行進行用戶定制:將每一列轉換成TemplateField,并在其FooterTemplate模板定制插入界面。2016-05-05
ASP.NET MVC4入門教程(八):給數(shù)據(jù)模型添加校驗器
本文介紹給模型添加校驗器,以前我們做表單驗證都要前臺驗證一遍,后臺再驗證一遍,MVC4中這種方式,只需在模型上加驗證規(guī)則,前后臺就都驗證了。2016-04-04

