.Net?Core服務(wù)治理Consul使用服務(wù)發(fā)現(xiàn)
先思考一些問(wèn)題:它是做什么的、以及怎么使用它。帶著這些問(wèn)題往下走。
consul是做什么的
consul用于微服務(wù)下的服務(wù)治理。服務(wù)治理是什么?它包含但不限于:服務(wù)發(fā)現(xiàn)、服務(wù)配置、健康檢查、鍵值存儲(chǔ)、安全服務(wù)通信、多數(shù)據(jù)中心等。
為什么需要服務(wù)治理?舉個(gè)例子:最開(kāi)始的服務(wù)比較簡(jiǎn)單,各服務(wù)之間通過(guò)API就能訪問(wèn)。后面業(yè)務(wù)復(fù)雜了,服務(wù)也跟著復(fù)雜了,搞分布式了,而分布式又必然是多服務(wù)器部署,這就有一個(gè)問(wèn)題:如果服務(wù)之間還是用API訪問(wèn),那某個(gè)服務(wù)所在的服務(wù)器掛掉以后這個(gè)服務(wù)就不能用了,也不能自動(dòng)轉(zhuǎn)移,那么只能人肉運(yùn)維了。這時(shí)候大家在想:如果下游調(diào)用上游,只需要一個(gè)統(tǒng)一的地址,不用關(guān)注負(fù)載均衡、節(jié)點(diǎn)失效之類的問(wèn)題,也不用關(guān)注可用性,這些都有一個(gè)中間件來(lái)完成,那該有多好。這個(gè)中間件要做的事情,就是服務(wù)治理,也就是本文的consul,它就是解決這個(gè)事的。但其實(shí)也不是只有它能做這個(gè)事,zooKeeper、etcd也能做這個(gè)事,也沒(méi)有什么高下之分,用什么主要看自己,看公司。對(duì)自己來(lái)說(shuō),哪個(gè)摸得透、玩的熟就用哪個(gè)。對(duì)公司來(lái)說(shuō),哪個(gè)市場(chǎng)認(rèn)可度高就用哪個(gè),說(shuō)白了就是哪個(gè)用的人多。用的人多會(huì)的人就多,招人換人速度就快了,互聯(lián)網(wǎng)企業(yè)追求的不就是速度么?“時(shí)間就是金錢,效率就是生命”,這句話早期在深圳隨處可見(jiàn),至今仍然適用。
題外話有點(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)說(shuō)就是所有節(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)通過(guò)控制臺(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,沒(méi)毛病。這時(shí)候模擬一下多節(jié)點(diǎn),再多啟動(dòng)兩個(gè)程序試試看:
5001,5002也自動(dòng)注冊(cè)進(jìn)入了這個(gè)分組。
因?yàn)闀r(shí)間關(guān)系,今天只能寫(xiě)到這里了,還有很多東西沒(méi)有寫(xiě),服務(wù)調(diào)用、健康檢查什么的,我會(huì)盡快再發(fā)文的。
到此這篇關(guān)于.Net Core服務(wù)治理Consul使用服務(wù)發(fā)現(xiàn)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
找不到類型或命名空間名稱“Server”(是否缺少 using 指令或程序集引用?)
找不到類型或命名空間名稱“Server”(是否缺少 using 指令或程序集引用?)...2006-10-10在ASP.NET 2.0中操作數(shù)據(jù)之四十三:DataList和Repeater數(shù)據(jù)排序(二)
上篇已經(jīng)介紹了DropDownList隱式使用ViewState,本文主要介紹詳細(xì)介紹直接使用ViewState存儲(chǔ)排序的條件,并配合上一頁(yè)、下一頁(yè)按鈕,實(shí)現(xiàn)DataList和Repeater自定義排序的功能。2016-05-05在MacOS+Linux+Nginx中發(fā)布和部署Asp.Net?Core
這篇文章介紹了在MacOS+Linux+Nginx中發(fā)布和部署Asp.Net?Core,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12.NET多種數(shù)據(jù)庫(kù)大數(shù)據(jù)批量插入、更新(支持SqlServer、MySql、PgSql和Oracle)
這篇文章介紹了.NET多種數(shù)據(jù)庫(kù)大數(shù)據(jù)批量插入、更新。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11ASP.NET MVC Bundles 用法和說(shuō)明(打包javascript和css)
本文主要介紹了ASP.NET MVC中的新功能Bundles,利用Bundles可以將javascript和css文件打包壓縮,并且可以區(qū)分調(diào)試和非調(diào)試,在調(diào)試時(shí)不進(jìn)行壓縮,以原始方式顯示出來(lái),以方便查找問(wèn)題。2016-04-04在ASP.NET 2.0中操作數(shù)據(jù)之三十九:在DataList的編輯界面里添加驗(yàn)證控件
為了防止用戶非法的輸入,這節(jié)主要介紹如何在編輯數(shù)據(jù)的時(shí)候添加驗(yàn)證控件,以避免出現(xiàn)異常和保證數(shù)據(jù)的完整性。2016-05-05ASP.NET 2.0中的數(shù)據(jù)操作之七:使用DropDownList過(guò)濾的主/從報(bào)表
本文主要介紹在ASP.NET 2.0中如何給DropDownList控件綁定數(shù)據(jù)源,并通過(guò)DropDownList所選的不同的值,篩選出不同的數(shù)據(jù)信息。2016-05-05解讀ASP.NET 5 & MVC6系列教程(7):依賴注入
這篇文章主要介紹了ASP.NET 5 依賴注入,需要的朋友可以參考下2016-06-06《解剖PetShop》之六:PetShop之表示層設(shè)計(jì)
表示層(Presentation Layer)通俗的講就是界面層,也就是展示給客戶的網(wǎng)頁(yè),本文主要講解PetShop4.0的表示層設(shè)計(jì),需要的朋友可以參考下。2016-05-05在ASP.NET 2.0中操作數(shù)據(jù)之四十九:為GridView控件添加RadioButton
本文主要講解ASP.NET 2.0為GridView的每一行添加RadioButton具體方法,并配合Literal控件實(shí)現(xiàn)單選的目的。2016-05-05