詳解在Windows下如何使用AspNetCore Api 和consul
一、概念:什么是consul:
Consul 是有多個(gè)組件組成的一個(gè)整體,作用和Eureka,Zookeeper相當(dāng),都是用來(lái)做服務(wù)的發(fā)現(xiàn)與治理。
Consul的特性:
1、服務(wù)的發(fā)現(xiàn):consul可以把注冊(cè)到其中的服務(wù)提供給使用者,也可以主動(dòng)發(fā)現(xiàn)服務(wù),在consul的客戶端界面中用戶可以得到,服務(wù)的信息,比如IP端口等信息,在客戶端界面中可以很容易的找到注冊(cè)的服務(wù),
2、健康檢查:這里健康檢查就是檢查服務(wù)是否在良好的運(yùn)行,這里判斷服務(wù)是否運(yùn)行良好,可以用Web服務(wù)的狀態(tài)進(jìn)行判斷,也可以用服務(wù)器的利用狀態(tài)進(jìn)行判斷,可以根據(jù)這些狀態(tài)來(lái)判斷那些服務(wù)是良好運(yùn)行的那些是不健康的()這里不健康可以是服務(wù)器的利用率)從而根據(jù)這些判斷路由遠(yuǎn)離不健康的服務(wù)。
3、KVStore:就是KEY/Value的存儲(chǔ),在使用中可以根據(jù)KV的存儲(chǔ)功能做很多事情比如,動(dòng)態(tài)的進(jìn)行配置,進(jìn)行一些特征的標(biāo)記,協(xié)調(diào),管理的選舉,KV存儲(chǔ)的API是基于HTTP的。
4、多數(shù)據(jù)中心:consul支持多哦數(shù)據(jù)中心,意味著我們這是用consul的過(guò)程中不必?fù)?dān)心多做更多的工作來(lái)進(jìn)行擴(kuò)展。
Consul是一個(gè)分布式的高可用的系統(tǒng)。每一個(gè)向consul注冊(cè)的的服務(wù),在服務(wù)無(wú)本身都會(huì)運(yùn)行一個(gè)(agents)代理,運(yùn)行代理的最終目的是為了對(duì)當(dāng)前服務(wù)進(jìn)行健康檢查,以便通知Consul系統(tǒng),當(dāng)前節(jié)點(diǎn)的健康與否,在consul的特性(健康檢查)我們已經(jīng)舉過(guò)例子。
每個(gè)數(shù)據(jù)中心運(yùn)行一個(gè)領(lǐng)事服務(wù)器集群。當(dāng)提出跨數(shù)據(jù)中心服務(wù)發(fā)現(xiàn)或配置請(qǐng)求時(shí),本地(agents)服務(wù)器將請(qǐng)求轉(zhuǎn)發(fā)到遠(yuǎn)程數(shù)據(jù)中心并返回結(jié)果。
(白話)進(jìn)行健康檢查就是為了決定能不能用這個(gè)節(jié)點(diǎn)服務(wù),這個(gè)節(jié)點(diǎn)的服務(wù)是否是所有已知節(jié)點(diǎn)中性能最好的,不是最好的換一個(gè)就是了。在使用的過(guò)程中每一個(gè)服務(wù)器運(yùn)行時(shí)建議模擬出多個(gè)可以導(dǎo)致服務(wù)失敗、數(shù)據(jù)丟失的場(chǎng)景,然后為每一個(gè)服務(wù)推薦用作安全的服務(wù)器。在這個(gè)過(guò)程中有一個(gè)最大的功臣就是代理(agents),代理實(shí)現(xiàn)了和服務(wù)器之間的交流。
了解更多:https://www.consul.io/intro/index.html
二、Consul的安裝:
1、Consul的下載:
點(diǎn)擊DOWNLOAO 進(jìn)入下載頁(yè)面如下:
我下載的是win版本并且已解壓,大小非常的小
2、安裝運(yùn)行:
安裝命令為:Consul.exe agent -dev開(kāi)發(fā)者模式安裝Ctrl+ C可以停止運(yùn)行如下圖:
開(kāi)發(fā)者模式安裝只適用于單個(gè)服務(wù)器的環(huán)境,不用于生產(chǎn),開(kāi)發(fā)者模式不保存任何的狀態(tài)。
安裝成功后,我們可以看到,輸出的日志信息中包含了。Client addr: 客戶端地址為,127.0.0.1:8500,DNS為8600 我們可以在瀏覽器中進(jìn)行訪問(wèn),
訪問(wèn)結(jié)果如下:
在頁(yè)面中我們可以看到我們的服務(wù)、consul 在會(huì)默認(rèn)把自己注冊(cè)成為一個(gè)服務(wù)節(jié)點(diǎn),界面中向我們展示了自己的運(yùn)行狀態(tài),IP服務(wù)器等信息
我們還可以通過(guò)命令來(lái)進(jìn)行查看 服務(wù)的信息
命令: consul members 下圖是輸出:
圖中向我們輸出了我們自己更加詳細(xì)的信息,地址、狀態(tài)、角色、版本信息
在后期我們使用的過(guò)程中我們會(huì)添加很多的服務(wù),這個(gè)時(shí)候的輸出可能更多,因?yàn)榉?wù)的信息是通過(guò)通訊協(xié)議獲取以及注冊(cè)的,為了避免consul視圖中的服務(wù)狀態(tài),和服務(wù)器上的狀態(tài)保持一致,就需要通過(guò)HttpApi將服務(wù)的狀態(tài)發(fā)送給consul中的管理(agent) 結(jié)合上文中consul的特性3KVStore我們可以更好的理解。
官方翻譯
中斷代理之后,您應(yīng)該看到它離開(kāi)集群并關(guān)閉。通過(guò)優(yōu)雅地離開(kāi),領(lǐng)事通知其他集群成員節(jié)點(diǎn)已離開(kāi)。如果您強(qiáng)制終止代理進(jìn)程,集群的其他成員將檢測(cè)到節(jié)點(diǎn)失敗。當(dāng)成員離開(kāi)時(shí),其服務(wù)和檢查將從目錄中刪除。當(dāng)一個(gè)成員失敗時(shí),它的健康狀態(tài)被簡(jiǎn)單地標(biāo)記為關(guān)鍵,但它不會(huì)從目錄中刪除。領(lǐng)事將自動(dòng)嘗試重新連接到失敗的節(jié)點(diǎn),允許它從某些網(wǎng)絡(luò)條件中恢復(fù),而不再與左側(cè)節(jié)點(diǎn)聯(lián)系。此外,如果代理作為服務(wù)器運(yùn)行,那么優(yōu)雅的休假對(duì)于避免可能導(dǎo)致影響協(xié)商一致協(xié)議的可用性中斷非常重要。
三、Consul的簡(jiǎn)單使用:
1、新建一個(gè)AspNetCoreAPI項(xiàng)目:
如下圖:
2、在項(xiàng)目中的Startup中Configure方法中實(shí)現(xiàn)注冊(cè):
代碼如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); String ip = Configuration["ip"];//部署到不同服務(wù)器的時(shí)候不能寫成127.0.0.1或者0.0.0.0,因?yàn)檫@是讓服務(wù)消費(fèi)者調(diào)用的地址 int port = int.Parse(Configuration["port"]);//獲取服務(wù)端口 var client = new ConsulClient(ConfigurationOverview); //回調(diào)獲取 var result = client.Agent.ServiceRegister(new AgentServiceRegistration() { ID = "ServerNameFirst" + Guid.NewGuid(),//服務(wù)編號(hào)保證不重復(fù) Name = "ServerFirst",//服務(wù)的名稱 Address = ip,//服務(wù)ip地址 Port = port,//服務(wù)端口 Check = new AgentServiceCheck //健康檢查 { DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服務(wù)啟動(dòng)多久后反注冊(cè) Interval = TimeSpan.FromSeconds(10),//健康檢查時(shí)間間隔,或者稱為心跳間隔(定時(shí)檢查服務(wù)是否健康) HTTP = $"http://{ip}:{port}/api/Health",//健康檢查地址 Timeout = TimeSpan.FromSeconds(5)//服務(wù)的注冊(cè)時(shí)間 } }); }
/// <summary> /// 獲取Consul的實(shí)例 /// </summary> /// <param name="obj"></param> private static void ConfigurationOverview(ConsulClientConfiguration obj) { //consul的地址 obj.Address = new Uri("http://127.0.0.1:8500"); //數(shù)據(jù)中心命名 obj.Datacenter = "dc1"; }
3、啟動(dòng):首先確保Consul已啟動(dòng),我們運(yùn)行項(xiàng)目注冊(cè)
步驟如下:
編譯Api 成功后我們通過(guò)命令行的方式運(yùn)行:
執(zhí)行命令:dotnet 項(xiàng)目DLL --ip 設(shè)置ip -- port 設(shè)置端口(dotnet Framework.WebApi.dll --ip 127.0.0.1 --port 5001) 敲擊回車運(yùn)行項(xiàng)目
同一個(gè)項(xiàng)目我們可以運(yùn)行多個(gè)在命令運(yùn)行時(shí)設(shè)置不同端口就可以運(yùn)行了
刷新consul客戶端我們可以看到我們的服務(wù)注冊(cè)成功了
結(jié)果如下:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#.net 微信公眾賬號(hào)接口開(kāi)發(fā)
這篇文章主要介紹了C#.net 微信公眾賬號(hào)接口開(kāi)發(fā),需要的朋友可以參考下2016-05-05Asp.net mvc實(shí)時(shí)生成縮率圖到硬盤
這篇文章主要介紹了Asp.net mvc實(shí)時(shí)生成縮率圖到硬盤的相關(guān)資料,需要的朋友可以參考下2016-05-05ASP.NET與ASP互通COOKIES的一點(diǎn)經(jīng)驗(yàn)
ASP與ASP.NET互相整合時(shí),其中文COOKIES信息無(wú)法被互通共享,當(dāng)使用ASP.NET寫入中文COOKIES信息后,使用ASP進(jìn)行讀取,讀出來(lái)的卻是亂碼,而非中文。2010-03-03超好用輕量級(jí)MVC分頁(yè)控件JPager.Net
本文給大家分享的是一款超好用輕量級(jí)MVC分頁(yè)控件--JPager.Net,小編自己也在使用,非常的不錯(cuò),推薦給大家。2016-06-06Asp.Net的FileUpload類實(shí)現(xiàn)上傳文件實(shí)例
這篇文章主要介紹了Asp.Net的FileUpload類實(shí)現(xiàn)上傳文件的方法,以實(shí)例形式講述了上傳文件類的具體實(shí)現(xiàn)方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11ASP.NET?Core通過(guò)Microsoft.AspNetCore.App元包簡(jiǎn)化程序集引用
這篇文章介紹了ASP.NET?Core通過(guò)Microsoft.AspNetCore.App元包簡(jiǎn)化程序集引用的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07asp.net點(diǎn)擊 查看更多 實(shí)現(xiàn)無(wú)刷新加載的實(shí)現(xiàn)代碼
asp.net點(diǎn)擊 查看更多 實(shí)現(xiàn)無(wú)刷新加載的實(shí)現(xiàn)代碼,需要的朋友可以參考下2012-06-06.NET全局靜態(tài)可訪問(wèn)IServiceProvider的過(guò)程詳解(支持Blazor)
為解決在靜態(tài)方法中訪問(wèn)依賴注入(DI)容器的問(wèn)題,提出了通過(guò)DependencyInjection.StaticAccessor包實(shí)現(xiàn)靜態(tài)訪問(wèn),這一方法特別適用于需要在靜態(tài)方法中獲取范圍內(nèi)(Scoped)服務(wù)的場(chǎng)景,感興趣的朋友跟隨小編一起看看吧2024-09-09