色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

NacosServiceRegistry的實(shí)現(xiàn)

Android編程精選 ? 來源:CSDN ? 作者:吳聲子夜歌 ? 2022-09-13 10:51 ? 次閱讀

Nacos架構(gòu)

342d8b58-328f-11ed-ba43-dac502259ad0.png

Provider APP:服務(wù)提供者

Consumer APP:服務(wù)消費(fèi)者

Name Server:通過VIP(Virtual IP)或DNS的方式實(shí)現(xiàn)Nacos高可用集群的服務(wù)路由

Nacos Server:Nacos服務(wù)提供者,里面包含的Open API是功能訪問入口,Conig Service、Naming Service 是Nacos提供的配置服務(wù)、命名服務(wù)模塊。Consitency Protocol是一致性協(xié)議,用來實(shí)現(xiàn)Nacos集群節(jié)點(diǎn)的數(shù)據(jù)同步,這里使用的是Raft算法(Etcd、Redis哨兵選舉)

Nacos Console:控制臺(tái)

346023f6-328f-11ed-ba43-dac502259ad0.jpg

注冊(cè)中心的原理

服務(wù)實(shí)例在啟動(dòng)時(shí)注冊(cè)到服務(wù)注冊(cè)表,并在關(guān)閉時(shí)注銷

服務(wù)消費(fèi)者查詢服務(wù)注冊(cè)表,獲得可用實(shí)例

服務(wù)注冊(cè)中心需要調(diào)用服務(wù)實(shí)例的健康檢查API來驗(yàn)證它是否能夠處理請(qǐng)求

346e7c76-328f-11ed-ba43-dac502259ad0.png

SpringCloud完成注冊(cè)的時(shí)機(jī)

在Spring-Cloud-Common包中有一個(gè)類org.springframework.cloud. client.serviceregistry .ServiceRegistry,它是Spring Cloud提供的服務(wù)注冊(cè)的標(biāo)準(zhǔn)。集成到Spring Cloud中實(shí)現(xiàn)服務(wù)注冊(cè)的組件,都會(huì)實(shí)現(xiàn)該接口

349b4dd2-328f-11ed-ba43-dac502259ad0.png

該接口有一個(gè)實(shí)現(xiàn)類是NacoServiceRegistry。

SpringCloud集成Nacos的實(shí)現(xiàn)過程:

在spring-clou-commons包的META-INF/spring.factories中包含自動(dòng)裝配的配置信息如下:

34c4dbfc-328f-11ed-ba43-dac502259ad0.png

其中AutoServiceRegistrationAutoConfiguration就是服務(wù)注冊(cè)相關(guān)的配置類:

34f369d6-328f-11ed-ba43-dac502259ad0.png

在AutoServiceRegistrationAutoConfiguration配置類中,可以看到注入了一個(gè)AutoServiceRegistration實(shí)例,該類的關(guān)系圖如下所示。

35280326-328f-11ed-ba43-dac502259ad0.png

可以看出,AbstractAutoServiceRegistration抽象類實(shí)現(xiàn)了該接口,并且最重要的是NacosAutoServiceRegistration繼承了AbstractAutoServiceRegistration。

看到EventListener我們就應(yīng)該知道,Nacos是通過Spring的事件機(jī)制繼承到SpringCloud中去的。

AbstractAutoServiceRegistration實(shí)現(xiàn)了onApplicationEvent抽象方法,并且監(jiān)聽WebServerInitializedEvent事件(當(dāng)Webserver初始化完成之后) , 調(diào)用this.bind ( event )方法。

3555ed54-328f-11ed-ba43-dac502259ad0.png

最終會(huì)調(diào)用NacosServiceREgistry.register()方法進(jìn)行服務(wù)注冊(cè)。

35731e88-328f-11ed-ba43-dac502259ad0.png359a4cc4-328f-11ed-ba43-dac502259ad0.png

NacosServiceRegistry的實(shí)現(xiàn)

在NacosServiceRegistry.registry方法中,調(diào)用了Nacos Client SDK中的namingService.registerInstance完成服務(wù)的注冊(cè)。

35b8d572-328f-11ed-ba43-dac502259ad0.png

跟蹤NacosNamingService的registerInstance()方法:

35e49b8a-328f-11ed-ba43-dac502259ad0.png

通過beatReactor.addBeatInfo()創(chuàng)建心跳信息實(shí)現(xiàn)健康檢測(cè), Nacos Server必須要確保注冊(cè)的服務(wù)實(shí)例是健康的,而心跳檢測(cè)就是服務(wù)健康檢測(cè)的手段。

serverProxy.registerService()實(shí)現(xiàn)服務(wù)注冊(cè)

心跳機(jī)制:

36133a8a-328f-11ed-ba43-dac502259ad0.png

從上述代碼看,所謂心跳機(jī)制就是客戶端通過schedule定時(shí)向服務(wù)端發(fā)送一個(gè)數(shù)據(jù)包 ,然后啟動(dòng)-個(gè)線程不斷檢測(cè)服務(wù)端的回應(yīng),如果在設(shè)定時(shí)間內(nèi)沒有收到服務(wù)端的回應(yīng),則認(rèn)為服務(wù)器出現(xiàn)了故障。Nacos服務(wù)端會(huì)根據(jù)客戶端的心跳包不斷更新服務(wù)的狀態(tài)。

注冊(cè)原理:

Nacos提供了SDK和Open API兩種形式來實(shí)現(xiàn)服務(wù)注冊(cè)。

Open API:

3640b91a-328f-11ed-ba43-dac502259ad0.png

SDK:

3664c378-328f-11ed-ba43-dac502259ad0.png

這兩種形式本質(zhì)都一樣,底層都是基于HTTP協(xié)議完成請(qǐng)求的。所以注冊(cè)服務(wù)就是發(fā)送一個(gè)HTTP請(qǐng)求:367d1db0-328f-11ed-ba43-dac502259ad0.png

對(duì)于nacos服務(wù)端,對(duì)外提供的服務(wù)接口請(qǐng)求地址為nacos/v1/ns/instance,實(shí)現(xiàn)代碼咋nacos-naming模塊下的InstanceController類中:

37690f0e-328f-11ed-ba43-dac502259ad0.png

從請(qǐng)求參數(shù)匯總獲得serviceName(服務(wù)名)和namespaceId(命名空間Id)

調(diào)用registerInstance注冊(cè)實(shí)例。

379e29dc-328f-11ed-ba43-dac502259ad0.png

創(chuàng)建一個(gè)控服務(wù)(在Nacos控制臺(tái)“服務(wù)列表”中展示的服務(wù)信息),實(shí)際上是初始化一個(gè)serviceMap,它是一個(gè)ConcurrentHashMap集合

getService,從serviceMap中根據(jù)namespaceId和serviceName得到一個(gè)服務(wù)對(duì)象

調(diào)用addInstance添加服務(wù)實(shí)例

37cfe13e-328f-11ed-ba43-dac502259ad0.png381640fc-328f-11ed-ba43-dac502259ad0.png

根據(jù)namespaceId、serviceName從緩存中獲取Service實(shí)例

如果Service實(shí)例為空,則創(chuàng)建并保存到緩存中

382fab6e-328f-11ed-ba43-dac502259ad0.png

通過putService()方法將服務(wù)緩存到內(nèi)存

service.init()建立心跳機(jī)制

consistencyService.listen實(shí)現(xiàn)數(shù)據(jù)一致性監(jiān)聽

service.init ( )方法的如下圖所示,它主要通過定時(shí)任務(wù)不斷檢測(cè)當(dāng)前服務(wù)下所有實(shí)例最后發(fā)送心跳包的時(shí)間。如果超時(shí),則設(shè)置healthy為false表示服務(wù)不健康,并且發(fā)送服務(wù)變更事件。

在這里請(qǐng)大家思考一一個(gè)問題,服務(wù)實(shí)例的最后心跳包更新時(shí)間是誰來觸發(fā)的?實(shí)際上前面有講到, Nacos客戶端注冊(cè)服務(wù)的同時(shí)也建立了心跳機(jī)制。

38614c32-328f-11ed-ba43-dac502259ad0.png

putService方法,它的功能是將Service保存到serviceMap中:

3884b474-328f-11ed-ba43-dac502259ad0.png

繼續(xù)調(diào)用addInstance方法把當(dāng)前注冊(cè)的服務(wù)實(shí)例保存到Service中:

38ad942a-328f-11ed-ba43-dac502259ad0.png

總結(jié):

Nacos客戶端通過Open API的形式發(fā)送服務(wù)注冊(cè)請(qǐng)求

Nacos服務(wù)端收到請(qǐng)求后,做以下三件事:

構(gòu)建一個(gè)Service對(duì)象保存到ConcurrentHashMap集合中

使用定時(shí)任務(wù)對(duì)當(dāng)前服務(wù)下的所有實(shí)例建立心跳檢測(cè)機(jī)制

基于數(shù)據(jù)一致性協(xié)議服務(wù)數(shù)據(jù)進(jìn)行同步

服務(wù)提供者地址查詢

Open API:

38c5a006-328f-11ed-ba43-dac502259ad0.png

SDK:

38d74252-328f-11ed-ba43-dac502259ad0.png

InstanceController中的list方法:

38f32a58-328f-11ed-ba43-dac502259ad0.png

解析請(qǐng)求參數(shù)。

通過doSrvIPXT返回服務(wù)列表數(shù)據(jù)

39398002-328f-11ed-ba43-dac502259ad0.png399643b4-328f-11ed-ba43-dac502259ad0.png

根據(jù)namespaceId、serviceName獲得Service實(shí)例

從Service實(shí)例中基于srvIPs得到所有服務(wù)提供者實(shí)例

遍歷組裝JSON字符串并返回

Nacos服務(wù)地址動(dòng)態(tài)感知原理

可以通過subscribe方法來實(shí)現(xiàn)監(jiān)聽,其中serviceName表示服務(wù)名、EventListener表示監(jiān)聽到的事件:

39ceeaca-328f-11ed-ba43-dac502259ad0.png

具體調(diào)用方式如下:

39e38f48-328f-11ed-ba43-dac502259ad0.png

或者調(diào)用selectInstance方法,如果將subscribe屬性設(shè)置為true,會(huì)自動(dòng)注冊(cè)監(jiān)聽:

3a126dd6-328f-11ed-ba43-dac502259ad0.png3a354cde-328f-11ed-ba43-dac502259ad0.png

Nacos客戶端中有一個(gè)HostReactor類,它的功能是實(shí)現(xiàn)服務(wù)的動(dòng)態(tài)更新,基本原理是:

客戶端發(fā)起時(shí)間訂閱后,在HostReactor中有一個(gè)UpdateTask線程,每10s發(fā)送一次Pull請(qǐng)求,獲得服務(wù)端最新的地址列表

另外,搜索公眾號(hào)Java架構(gòu)師技術(shù)后臺(tái)回復(fù)“Spring”,獲取一份驚喜禮包。

對(duì)于服務(wù)端,它和服務(wù)提供者的實(shí)例之間維持了心跳檢測(cè),一旦服務(wù)提供者出現(xiàn)異常,則會(huì)發(fā)送一個(gè)Push消息給Nacos客戶端,也就是服務(wù)端消費(fèi)者

服務(wù)消費(fèi)者收到請(qǐng)求之后,使用HostReactor中提供的processServiceJSON解析消息,并更新本地服務(wù)地址列表。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1510

    瀏覽量

    62299
  • DNS
    DNS
    +關(guān)注

    關(guān)注

    0

    文章

    219

    瀏覽量

    19905
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1045

    瀏覽量

    46154
  • HTTP協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    66

    瀏覽量

    9765

原文標(biāo)題:Nacos 為什么這么強(qiáng)!Nacos實(shí)現(xiàn)原理詳解。。

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    WEBENCH電源設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《WEBENCH電源設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 01-21 14:52 ?0次下載
    WEBENCH電源設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    基于FPGA實(shí)現(xiàn)圖像直方圖設(shè)計(jì)

    直方圖統(tǒng)計(jì)的原理 直方圖統(tǒng)計(jì)從數(shù)學(xué)上來說,是對(duì)圖像中的像素點(diǎn)進(jìn)行統(tǒng)計(jì)。圖像直方圖統(tǒng)計(jì)常用于統(tǒng)計(jì)灰度圖像,表示圖像中各個(gè)灰度級(jí)出現(xiàn)的次數(shù)或者概率。統(tǒng)計(jì)直方圖的實(shí)現(xiàn)采用C/C++或者其他高級(jí)語言實(shí)現(xiàn)十分
    的頭像 發(fā)表于 12-24 10:24 ?192次閱讀
    基于FPGA<b class='flag-5'>實(shí)現(xiàn)</b>圖像直方圖設(shè)計(jì)

    智能制造如何實(shí)現(xiàn)

    智能制造的實(shí)現(xiàn)是一個(gè)系統(tǒng)性工程,涉及技術(shù)、流程、組織結(jié)構(gòu)等多個(gè)方面的變革。以下是實(shí)現(xiàn)智能制造的關(guān)鍵步驟和方法: 1. 技術(shù)升級(jí)和應(yīng)用:智能制造的實(shí)現(xiàn)需要依托先進(jìn)的信息技術(shù),包括工業(yè)互聯(lián)網(wǎng)、5G
    的頭像 發(fā)表于 11-20 09:43 ?690次閱讀

    PowerPAD?輕松實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《PowerPAD?輕松實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-29 10:08 ?0次下載
    PowerPAD?輕松<b class='flag-5'>實(shí)現(xiàn)</b>

    通過電平轉(zhuǎn)換實(shí)現(xiàn)窄帶IoT實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《通過電平轉(zhuǎn)換實(shí)現(xiàn)窄帶IoT實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 09-21 11:08 ?0次下載
    通過電平轉(zhuǎn)換<b class='flag-5'>實(shí)現(xiàn)</b>窄帶IoT<b class='flag-5'>實(shí)現(xiàn)</b>

    使用DSPLIB FFT實(shí)現(xiàn)實(shí)現(xiàn)實(shí)際輸入,無需數(shù)據(jù)縮放

    電子發(fā)燒友網(wǎng)站提供《使用DSPLIB FFT實(shí)現(xiàn)實(shí)現(xiàn)實(shí)際輸入,無需數(shù)據(jù)縮放.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 11:27 ?0次下載
    使用DSPLIB FFT<b class='flag-5'>實(shí)現(xiàn)實(shí)現(xiàn)</b>實(shí)際輸入,無需數(shù)據(jù)縮放

    如何實(shí)現(xiàn)多枚TAS5630并聯(lián)實(shí)現(xiàn)更多功率輸出?

    我想請(qǐng)教下,如何實(shí)現(xiàn)多枚TAS5630并聯(lián)實(shí)現(xiàn)更多功率輸出,謝謝
    發(fā)表于 09-13 06:47

    labview實(shí)現(xiàn)tcp通訊

    labview實(shí)現(xiàn)tcp通訊
    發(fā)表于 08-19 14:26 ?15次下載

    如何實(shí)現(xiàn)pwm的控制功能

    數(shù)字信號(hào)控制技術(shù),通過控制脈沖的占空比來實(shí)現(xiàn)對(duì)模擬信號(hào)的控制。占空比是指在一個(gè)周期內(nèi),脈沖的高電平時(shí)間與整個(gè)周期時(shí)間的比值。 特點(diǎn) PWM具有以下特點(diǎn): (1)簡(jiǎn)單易實(shí)現(xiàn):PWM只需要數(shù)字信號(hào),不需要模擬信號(hào),因此實(shí)現(xiàn)起來相對(duì)簡(jiǎn)
    的頭像 發(fā)表于 08-08 15:08 ?893次閱讀

    PWM控制電機(jī)轉(zhuǎn)速的原理與實(shí)現(xiàn)

    PWM(脈寬調(diào)制)是一種廣泛應(yīng)用于電機(jī)控制領(lǐng)域的調(diào)制技術(shù)。它通過調(diào)節(jié)脈沖信號(hào)的占空比,實(shí)現(xiàn)對(duì)電機(jī)轉(zhuǎn)速的精確控制。PWM控制電機(jī)轉(zhuǎn)速的方法因其高效、穩(wěn)定、易于實(shí)現(xiàn)等優(yōu)點(diǎn),在現(xiàn)代工業(yè)、家電、汽車等領(lǐng)域得到了廣泛應(yīng)用。本文將詳細(xì)介紹PWM控制電機(jī)轉(zhuǎn)速的原理、
    的頭像 發(fā)表于 06-03 17:23 ?6601次閱讀

    STM8如何實(shí)現(xiàn)批量燒錄?

    如題,是否可以實(shí)現(xiàn)? 如何實(shí)現(xiàn)? STM8 通過SWIM(ICP)是否能夠實(shí)現(xiàn)多機(jī)通訊?
    發(fā)表于 04-30 06:49

    PLC如何實(shí)現(xiàn)監(jiān)視功能?

    PLC(Programmable Logic Controller)實(shí)現(xiàn)監(jiān)視功能主要依賴于其編程軟件中的專門監(jiān)視窗口。
    的頭像 發(fā)表于 04-01 10:08 ?2384次閱讀

    stm32h750既要實(shí)現(xiàn)主機(jī),也要實(shí)現(xiàn)從機(jī)功能,要怎么實(shí)現(xiàn)呢?

    h750的板子實(shí)現(xiàn)OTG功能,作為主機(jī)識(shí)別接入的u盤;作為從機(jī)接入電腦時(shí),模擬成一個(gè)u盤。 在cubemx中USB_OTG_FS的mode中選擇OTG/Dual_Role_Device,在
    發(fā)表于 03-19 06:46

    【鴻蒙】NAPI 框架生成工具實(shí)現(xiàn)流程

    開發(fā)者無需關(guān)注 Nodejs 語法、C++ 與 JS 之間的數(shù)據(jù)類型轉(zhuǎn)換等上層應(yīng)用轉(zhuǎn)換邏輯,只關(guān)注底層業(yè)務(wù)邏輯即可。 那他的實(shí)現(xiàn)過程,以及在實(shí)際開發(fā)中該如何使用呢?為此分析了下代碼,分解其過程如下。 1.
    的頭像 發(fā)表于 02-28 17:00 ?721次閱讀
    【鴻蒙】NAPI 框架生成工具<b class='flag-5'>實(shí)現(xiàn)</b>流程

    電阻是如何實(shí)現(xiàn)上下拉功能的呢?

    電阻是如何實(shí)現(xiàn)上下拉功能的呢? 上下拉功能是指在電路中通過連接電阻來實(shí)現(xiàn)對(duì)信號(hào)的上拉和下拉控制。在數(shù)字電路中,上拉和下拉功能通常用于控制輸入端的電平狀態(tài),確保輸入端在沒有外部信號(hào)輸入時(shí)能夠保持穩(wěn)定
    的頭像 發(fā)表于 02-04 09:32 ?1018次閱讀
    主站蜘蛛池模板: 99久久精品全部 | 国产99小视频 | 迅雷哥在线观看高清 | www免费看.男人的天堂 | 亚洲成色爱我久久 | 国产国产乱老熟女视频网站97 | 久久久无码精品无码国产人妻丝瓜 | 甜性涩爱免费下载 | 国产伦精品一区二区三区免费 | 免费一级片网站 | 国语对白刺激真实精品 | 国产手机在线亚洲精品观看 | 久久国产精品高清一区二区三区 | 91精品国产色综合久久 | 久久国产精品麻豆AV影视 | 国产成人精品男人的天堂网站 | 美女被爆插 | 第一次玩老妇真实经历 | oldgrand欧洲老妇人 | 亚洲精品久久久一区 | 国产欧美一区二区三区免费 | 亚洲色欲啪啪久久WWW综合网 | 大咪咪dvd | 新版孕妇bbwbbwbbw | 亚洲精品在线不卡 | 大地影院免费观看视频 | 97夜夜澡人人爽人人模人人喊 | 国产亚洲精品97在线视频一 | 做你的爱人BD日本 | 国产跪地吃黄金喝圣水合集 | 国产高清在线露脸一区 | china年轻小帅脸直播飞机 | 国产精品一区二区免费 | 国产精品久久久久久久久免费下载 | 亚洲日本国产综合高清 | 亚洲国产成人久久一区www妖精 | 伊人不卡久久大香线蕉综合影院 | 亚洲午夜精品AV无码少妇 | 男宿舍里的呻吟h | 黄色xxxxxx| 亚洲狠狠网站色噜噜 |