.Net?Core服務(wù)治理Consul健康檢查
繼續(xù)上一篇的話題,順便放上一篇的傳送門(mén):點(diǎn)這里。
健康檢查
經(jīng)過(guò)之前的操作,我的consul已經(jīng)支持自動(dòng)擴(kuò)展,并且調(diào)用也很靠譜。但是這里有個(gè)問(wèn)題,一旦服務(wù)列表里的某個(gè)服務(wù)掛了,consul并不知道,還是會(huì)把實(shí)際無(wú)效的地址返回給我,就算重啟consul容器也無(wú)法刷新到最新的狀態(tài)。所以,咱們要監(jiān)控服務(wù)可用性,主動(dòng)區(qū)分出不可用服務(wù),這種手段,就稱之為健康檢查。
進(jìn)入編碼環(huán)節(jié)。老規(guī)矩,還是進(jìn)入到之前我封裝好的注冊(cè)方法,在注冊(cè)時(shí)增加健康檢查的內(nèi)容:
client.Agent.ServiceRegister(new AgentServiceRegistration()
{
ID = $"server {ip}:{port}",
Name = "shenzhen-ma",
Address = ip,
Port = int.Parse(port),
Tags = new string[] { weight },
Check = new AgentServiceCheck()
{
Interval = TimeSpan.FromSeconds(10),//每隔10秒發(fā)起檢查
HTTP = $"http://{ip}:{port}/v1/client/base/index",//檢查請(qǐng)求地址
Timeout = TimeSpan.FromSeconds(5),//超時(shí)時(shí)長(zhǎng)5秒
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(10)//超過(guò)10秒還沒(méi)能連接到服務(wù),就開(kāi)始注銷本服務(wù)
}
});變色部分就是健康檢查的配置了。根據(jù)上面的配置,consul會(huì)周期性發(fā)起健康檢查,并且根據(jù)結(jié)果自動(dòng)移除不可用的服務(wù)。
這次我要嚴(yán)謹(jǐn)一些,用真實(shí)的遠(yuǎn)程服務(wù)器來(lái)模擬生產(chǎn)環(huán)境。手頭服務(wù)器太多,很多有項(xiàng)目在跑。仔細(xì)翻了翻,發(fā)現(xiàn)還有兩臺(tái)相對(duì)空閑的服務(wù)器,一臺(tái)是win server,另一臺(tái)centos,嘿嘿,正好。centos做consul服務(wù)器,win服務(wù)器用來(lái)做下游調(diào)用方。
先把consul搞起來(lái):

進(jìn)去訪問(wèn)下:

OK了,現(xiàn)在轉(zhuǎn)到另一臺(tái)服務(wù)器跑幾個(gè)客戶端。這里偷個(gè)懶,直接把可運(yùn)行文件拷貝過(guò)去,哈哈:

看下consul控制臺(tái):

還是熟悉的shenzhen-ma,兩個(gè)服務(wù)已經(jīng)穩(wěn)穩(wěn)的待在分組列表里了。注意我框起來(lái)的位置,它表示服務(wù)已經(jīng)通過(guò)了健康檢查。這時(shí)候我把5051這個(gè)程序關(guān)掉,再來(lái)看看:

5051狀態(tài)自動(dòng)更新成failing,而且沒(méi)過(guò)一會(huì)兒,它就會(huì)自動(dòng)移除。5050這時(shí)候去再去訪問(wèn),就訪問(wèn)不到5051了:

再然后偷偷把5051跑起來(lái),重新調(diào)用:

又可以訪問(wèn)了不是?
新實(shí)例啟動(dòng)自動(dòng)發(fā)現(xiàn),實(shí)例狀態(tài)異常自動(dòng)剔除,下端調(diào)用無(wú)需任何調(diào)整,舒坦。起碼我這個(gè)懶人覺(jué)得很舒服。
tips:新的服務(wù)默認(rèn)狀態(tài)是failing,注冊(cè)成功后會(huì)馬上發(fā)起一次檢查,成功后才會(huì)變更狀態(tài)。而且服務(wù)注銷沒(méi)有那么快,耗時(shí)一般都會(huì)比設(shè)置的時(shí)間長(zhǎng)。
最后一點(diǎn)
關(guān)于consul寫(xiě)了3篇了,要是都看完,想在項(xiàng)目里用起來(lái)是沒(méi)問(wèn)題的,不過(guò)要上生產(chǎn)環(huán)境仍然有個(gè)隱患:?jiǎn)吸c(diǎn)故障。你想啊,consul這么能干,萬(wàn)一它掛了可咋整。。。。所以集群是必要的,而且集群之后的服務(wù)注冊(cè)、調(diào)用自然就不能和單體一樣。這問(wèn)題三言兩語(yǔ)還說(shuō)不清,后面再寫(xiě)吧。
到此這篇關(guān)于.Net Core服務(wù)治理Consul健康檢查的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET:ADO.NET的DataAdapter對(duì)象
ASP.NET:ADO.NET的DataAdapter對(duì)象...2006-10-10
在ASP.NET 2.0中操作數(shù)據(jù)之五十七:在分層架構(gòu)中緩存數(shù)據(jù)
上一篇文章我們介紹了ASP.NET 2.0中使用ObjectDataSource在視圖層緩存數(shù)據(jù),缺點(diǎn)是不言而喻的,為了達(dá)到低耦合,本文介紹如何在三層架構(gòu)中使用緩存技術(shù)來(lái)緩存數(shù)據(jù)。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之四十:自定義DataList編輯界面
先前的編輯界面清一色的都是TextBox控件,當(dāng)然EditItemTemplate還可以包含很多其他的控件,比如DropDownLists, RadioButtonLists, Calendars等,這一節(jié)就讓我們看看如何實(shí)現(xiàn)添加其他的控件。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之三十九:在DataList的編輯界面里添加驗(yàn)證控件
為了防止用戶非法的輸入,這節(jié)主要介紹如何在編輯數(shù)據(jù)的時(shí)候添加驗(yàn)證控件,以避免出現(xiàn)異常和保證數(shù)據(jù)的完整性。2016-05-05
.Net Core服務(wù)治理Consul自動(dòng)擴(kuò)展和服務(wù)調(diào)用
這篇文章介紹了.Net Core服務(wù)治理Consul自動(dòng)擴(kuò)展和服務(wù)調(diào)用,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
解讀ASP.NET 5 & MVC6系列教程(15):MvcOptions配置
這篇文章主要介紹了ASP.NET 5 MVC6中MvcOptions配置方法,需要的朋友可以參考下2016-06-06
ASP.NET MVC4入門(mén)教程(七):給電影表和模型添加新字段
本文使用Entity Framework Code First來(lái)實(shí)現(xiàn)模型類上的操作,使用代碼優(yōu)先的模式,從而使得直接修改代碼,數(shù)據(jù)庫(kù)也會(huì)做相應(yīng)的改變。2016-04-04
在ASP.NET 2.0中操作數(shù)據(jù)之五十五:編輯和刪除現(xiàn)有的二進(jìn)制數(shù)據(jù)
前面幾節(jié)我們講解了ASP.NET中如何上傳顯示二進(jìn)制圖片數(shù)據(jù),這一節(jié)我們來(lái)介紹一下如何在GridView編輯和刪除已經(jīng)存在的二進(jìn)制數(shù)據(jù)。2016-05-05

