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

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

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

能看到多了一個(gè)分組【shenzhen-ma】,點(diǎn)進(jìn)去看下我們的服務(wù):

127.0.0.1:5000,沒毛病。這時(shí)候模擬一下多節(jié)點(diǎn),再多啟動(dòng)兩個(gè)程序試試看:

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

