服務(wù)注冊&發(fā)現(xiàn)之nacos服務(wù)發(fā)現(xiàn)篇

前一篇解析了服務(wù)是怎么進行注冊的滥崩,接下來解析一下服務(wù)注冊之后服務(wù)之間是如何發(fā)現(xiàn)彼此的末荐。

相對服務(wù)注冊而言服務(wù)發(fā)現(xiàn)就簡單很多了唠粥。就是Nacos客戶端調(diào)用Open api或者SDK查詢服務(wù)列表,服務(wù)端接受到請求后根據(jù)將查詢到服務(wù)包裝成json格式返回梆暮。

既然如此那客戶端是啥時候發(fā)起服務(wù)列表查詢?如果客戶端查的時差內(nèi)胧卤,剛好有服務(wù)實例有dowan掉的唯绍,那客戶端的請求豈不是有請求到dowan的服務(wù)實例去?不是吧枝誊?帶著這個疑問我們接著分析况芒,揭開一層層疑惑。

根據(jù)之前eureka的經(jīng)驗叶撒,客戶端本身通常會維護一個本地服務(wù)地址列表绝骚,不會在每次請求時都去請求一次服務(wù)端的來拉取最新的服務(wù)地址。那么這個本地服務(wù)地址列表就有一個時效性問題祠够。

老規(guī)矩我們看下spring-cloud-starter-alibaba-nacos-discovery包下的spring.facories文件很容易找到與服務(wù)發(fā)現(xiàn)相關(guān)的配置類压汪。

NacosWatch引起了我的注意為Nacos提供subscribe(String serviceName,EventListener listener)來進行訂閱監(jiān)聽。深入一步其實是namingService的subscribe機制古瓤,而nacos的NacosNamingService實現(xiàn)了這個接口止剖,我們進入到NacosNamingService的subscribe方法一探究竟,最后發(fā)現(xiàn)調(diào)用的HostReactor的subscribe方法

注意到客戶端有一個HostReactor類落君,在com.alibaba.nacos.client.naming.core包下穿香。

跟蹤進去在scheduleUpdateIfAbsent中發(fā)現(xiàn)新增了一個任務(wù)。

HostReactor它里面有一個UpdateTask線程绎速,每1s發(fā)送一次pull拉取請求扔水,獲取服務(wù)最新的地址列表。

更新服務(wù)的核心邏輯在updateService方法中

在看看processServiceJson方法朝氓,本地維護一個Map<String,ServiceInfo>?serviceInfoMap存儲服務(wù)信息,同時調(diào)用DiskCache.write(serviceInfo, this.cacheDir)方法把服務(wù)信息寫入本地緩存文件中;

對于服務(wù)端采取的是基于心跳機制push的方式實現(xiàn)的主届,由于服務(wù)端和服務(wù)提供者建立心跳機制赵哲,一旦服務(wù)出現(xiàn)故障,服務(wù)端察覺出后君丁,會發(fā)送一個push消息給Nacos客戶端枫夺,也就是我們的消費者。這個push消息是使用DatagramSocket來實現(xiàn)的绘闷。

服務(wù)消費者收到服務(wù)端發(fā)來的push消息之后橡庞,使用HostReactor中提供的ServiceInfo processServiceJson(String json)方法解析消息,并更新本地服務(wù)地址列表印蔗。

這里不贅述了扒最,如果不太清晰的話,可以參照下面的圖更容易理解服務(wù)動態(tài)感知原理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末华嘹,一起剝皮案震驚了整個濱河市吧趣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖强挫,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岔霸,死亡現(xiàn)場離奇詭異,居然都是意外死亡俯渤,警方通過查閱死者的電腦和手機呆细,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來八匠,“玉大人絮爷,你說我怎么就攤上這事⊥涡穑” “怎么了略水?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長劝萤。 經(jīng)常有香客問我渊涝,道長,這世上最難降的妖魔是什么床嫌? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任跨释,我火速辦了婚禮,結(jié)果婚禮上厌处,老公的妹妹穿的比我還像新娘鳖谈。我一直安慰自己,他們只是感情好阔涉,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布缆娃。 她就那樣靜靜地躺著,像睡著了一般瑰排。 火紅的嫁衣襯著肌膚如雪贯要。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天椭住,我揣著相機與錄音崇渗,去河邊找鬼。 笑死京郑,一個胖子當(dāng)著我的面吹牛宅广,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播些举,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼跟狱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了户魏?” 一聲冷哼從身側(cè)響起兽肤,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤套腹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后资铡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體电禀,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年笤休,在試婚紗的時候發(fā)現(xiàn)自己被綠了尖飞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡店雅,死狀恐怖政基,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闹啦,我是刑警寧澤沮明,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站窍奋,受9級特大地震影響荐健,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜琳袄,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一江场、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窖逗,春花似錦址否、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仗考,卻和暖如春帮匾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痴鳄。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缸夹,地道東北人痪寻。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像虽惭,于是被迫代替她去往敵國和親橡类。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容