精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊對Nacos Client服務發現源碼分析

開發 前端
本篇帶大家通過源碼層面分析一下Nacos Client的服務發現的路程,事實可能并不像你想象的那樣簡單。

[[416416]]

本文轉載自微信公眾號「程序新視界」,作者二師兄。轉載本文請聯系程序新視界公眾號。

學習不用那么功利,二師兄帶你從更高維度輕松閱讀源碼~

本篇帶大家通過源碼層面分析一下Nacos Client的服務發現的路程,事實可能并不像你想象的那樣簡單。

Nacos服務發現

直觀的看,Nacos客戶端的服務發現,就是封裝參數、調用服務端接口、獲得返回實例列表。

naocos

但細化這個流程,會發現不僅包括了通過NamingService獲取服務列表,在獲取服務列表的過程中還涉及到通信協議(Http or gRPC)、訂閱流程、故障轉移邏輯等。下面我們根據服務發現來捋一下相關的流程。

先說入口程序,依舊是在NamingTest中可以看到:

  1. NamingService namingService = NacosFactory.createNamingService(properties); 
  2. namingService.registerInstance("nacos.test.1", instance); 
  3.  
  4. ThreadUtils.sleep(5000L); 
  5. // 獲取實例列表 
  6. List<Instance> list = namingService.getAllInstances("nacos.test.1"); 

關于NamingService的實例化和基本功能,在服務注冊時已經講過,這里直接看獲取實例列表方法getAllInstances。該方法的參數就是服務的名稱。

經過一些列的重載方法調用,真正處理核心邏輯的方法如下:

  1. @Override 
  2. public List<Instance> getAllInstances(String serviceName, String groupName, List<String> clusters, 
  3.         boolean subscribe) throws NacosException { 
  4.     ServiceInfo serviceInfo; 
  5.     String clusterString = StringUtils.join(clusters, ","); 
  6.     // 是否訂閱模式 
  7.     if (subscribe) { 
  8.         // 先從客戶端緩存獲取服務信息 
  9.         serviceInfo = serviceInfoHolder.getServiceInfo(serviceName, groupName, clusterString); 
  10.         if (null == serviceInfo) { 
  11.             // 如果本地緩存不存在服務信息,則進行訂閱 
  12.             serviceInfo = clientProxy.subscribe(serviceName, groupName, clusterString); 
  13.         } 
  14.     } else { 
  15.         // 如果未訂閱服務信息,則直接從服務器進行查詢 
  16.         serviceInfo = clientProxy.queryInstancesOfService(serviceName, groupName, clusterString, 0, false); 
  17.     } 
  18.     // 從服務信息中獲去實例列表 
  19.     List<Instance> list; 
  20.     if (serviceInfo == null || CollectionUtils.isEmpty(list = serviceInfo.getHosts())) { 
  21.         return new ArrayList<Instance>(); 
  22.     } 
  23.     return list; 

首先看重載的getAllInstances方法,比入口方法多了幾個參數,這里不僅有服務名稱,還有分組名稱(groupName)、集群列表(clusters)、是否訂閱(subscribe)。

重載方法中的其他參數已經設置了默認值。比如,分組名稱默認為“DEFAULT_GROUP”、集群列表默認為空數組、是否訂閱默認為“訂閱”。

上述方法整理成流程圖如下:

naocos

上述流程的基本邏輯為:

如果是訂閱模式,則直接從本地緩存獲取服務信息(ServiceInfo),然后從中獲取實例列表,這是因為訂閱機制會自動同步服務器實例的變化到本地。如果本地緩存中沒有,那說明是首次調用,則進行訂閱,在訂閱完成后會獲得到服務信息。

如果是非訂閱模式,那就直接請求服務器端,獲得服務信息。

訂閱處理流程

在上述流程中,涉及到了訂閱邏輯,入口代碼為獲取實例列表中的如下方法:

  1. serviceInfo = clientProxy.subscribe(serviceName, groupName, clusterString); 

下面就來看看該方法內部是如何進行處理的。首先,這里的clientProxy是NamingClientProxy類的對象。對應的subscribe實現如下:

  1. @Override 
  2. public ServiceInfo subscribe(String serviceName, String groupName, String clusters) throws NacosException { 
  3.     String serviceNameWithGroup = NamingUtils.getGroupedName(serviceName, groupName); 
  4.     String serviceKey = ServiceInfo.getKey(serviceNameWithGroup, clusters); 
  5.     // 獲取緩存中的ServiceInfo 
  6.     ServiceInfo result = serviceInfoHolder.getServiceInfoMap().get(serviceKey); 
  7.     if (null == result) { 
  8.         // 如果為null,則進行訂閱邏輯處理,基于gRPC協議 
  9.         result = grpcClientProxy.subscribe(serviceName, groupName, clusters); 
  10.     } 
  11.     // 定時調度UpdateTask 
  12.     serviceInfoUpdateService.scheduleUpdateIfAbsent(serviceName, groupName, clusters); 
  13.     // ServiceInfo本地緩存處理 
  14.     serviceInfoHolder.processServiceInfo(result); 
  15.     return result; 

在上述代碼中,可以看到在獲取服務實例列表時(特別是首次),也進行了訂閱邏輯的拓展,基本流程圖如下:

naocos

上圖流程中可以看出,訂閱方法先通過代理類進行了本地緩存的判斷,如果本地緩存存在ServiceInfo信息,則直接返回。如果不存在,則默認采用gRPC協議進行訂閱,并返回ServiceInfo。

grpcClientProxy的subscribe訂閱方法就是直接向服務器發送了一個訂閱請求,并返回結果,就沒有做過多處理了。

訂閱完成之后,會通過ServiceInfoUpdateService開啟一個定時任務,這個定時任務主要的作用就是來定時同步服務器端的實例列表信息,并進行本地緩存更新等操作。

最后一步,ServiceInfo本地緩存處理。這里會將獲得的最新ServiceInfo與本地內存中的ServiceInfo進行比較,更新,發布變更時間,磁盤文件存儲等操作。其實,這一步的操作,在訂閱定時任務中也進行了處理。

關于訂閱細節和本地緩存處理,涉及內容較多,我們后面單獨拓展開講解。這里知道整體流程即可。

小結

本文主要梳理了Nacos客戶端服務發現的核心流程,包括:

第一,如果沒有開啟訂閱模式,則直接通過/instance/list接口(默認通過gRPC協議)獲取服務實例列表信息;

第二,如果開啟訂閱模式(默認開啟),則先會從本地緩存中獲取實例信息,如果不存在,則進行訂閱獲并獲取實例信息;

第三,在開啟訂閱時,會開啟定時任務,定時執行UpdateTask(獲取服務器實例信息、更新本地緩存、發布事件);

第四,在第二步獲得最新的實例信息之后,也會執行processServiceInfo方法來更新內存和本地實例緩存,并發布變更時間。

第五,至此,與第二步形成循環,每次獲取本地緩存,不存在則更新……

 

關于用來處理訂閱相關的UpdateTask和用來處理本地緩存的ServiceInfoHolder#processServiceInfo方法,我們后面文章繼續講解。

 

責任編輯:武曉燕 來源: 程序新視界
相關推薦

2021-07-12 08:00:21

Nacos 服務注冊源碼分析

2021-07-16 06:56:50

Nacos注冊源碼

2021-09-08 06:51:53

CountDownLa閉鎖源碼

2021-08-09 07:58:36

Nacos 服務注冊源碼分析

2021-05-18 20:22:00

Spring ClouNacos服務

2021-08-16 07:26:42

服務訂閱機制

2021-08-12 06:52:01

Nacos服務機制

2023-09-06 18:16:14

自動發現Zabbix網絡

2021-09-07 07:53:42

Semaphore 信號量源碼

2024-07-05 08:26:54

2010-02-06 13:28:31

Android源碼

2022-02-07 07:10:32

服務注冊功能

2022-02-09 07:03:01

SpringNacos服務注冊

2021-05-27 22:46:00

Nacos Clien版本Nacos

2022-05-08 17:53:38

Nacos服務端客戶端

2022-05-06 07:52:06

Nacos服務注冊

2021-04-18 07:33:20

項目Springboot Nacos

2022-09-28 11:34:27

用戶行為數據業務

2024-07-03 13:51:02

SQL毛刺數據庫

2023-11-02 20:05:17

KubernetesPod管理
點贊
收藏

51CTO技術棧公眾號

baoyu135国产精品免费| 成人在线观看免费网站| 欧美亚洲一区| 在线观看欧美成人| 中国黄色片免费看| av网址在线看| www亚洲一区| 国产日韩中文字幕| 国产成人啪精品午夜在线观看| 嫩草一区二区三区| 欧美一区国产二区| 国产91对白刺激露脸在线观看| 在线免费黄色| av激情综合网| 亚洲va久久久噜噜噜久久天堂| 日本少妇毛茸茸高潮| 日韩1区2区| 亚洲高清久久网| 色悠悠久久综合网| wwww亚洲| 亚洲人吸女人奶水| 欧美xxxx黑人又粗又长精品| 丰满人妻熟女aⅴ一区| 久久精品一区| 国产+成+人+亚洲欧洲| 成人午夜免费影院| 五月天亚洲色图| 91精品久久久久久久久99蜜臂| 日本成年人网址| 18视频在线观看网站| 国产欧美日韩不卡免费| 韩国成人一区| 精品人妻一区二区三区含羞草| 天堂蜜桃91精品| 97在线看免费观看视频在线观看| 久久久久久久久久97| 国内精品视频在线观看| 亚洲国产精品人久久电影| 国产一级片自拍| 成人精品电影在线| 精品国产成人在线| 999久久欧美人妻一区二区| 在线观看a视频| 久久久久久久久蜜桃| 国产女主播一区二区| 亚洲第一成人av| 国产在线观看免费一区| 国产精品视频一区二区三区四| 中文字幕日韩免费| 免费一区视频| 日本一区二区在线播放| 国产www在线| 一区二区国产在线观看| 97色在线视频观看| 欧美一级高潮片| 亚洲视频福利| 欧美精品video| 国产亚洲精品成人| 在线日韩欧美| 97在线视频免费观看| 国产精品一区二区三区在线| 日本免费黄色小视频| 国产主播福利在线| 国产欧美精品一区| 日韩国产在线一区| 成人免费高清在线播放| 国产亚洲欧美色| 午夜精品亚洲一区二区三区嫩草 | 日韩国产在线一| 日本一区二区不卡| 国产午夜无码视频在线观看| 秋霞电影网一区二区| 国产精品自拍偷拍视频| 91亚洲欧美激情| 国产乱码精品1区2区3区| 91九色在线免费视频| 性生活免费网站| 波波电影院一区二区三区| 国产一区在线免费观看| 男女污污视频在线观看| 国产欧美精品区一区二区三区| 亚洲精品免费在线看| av网址在线播放| 午夜一区二区三区视频| 国产三级三级三级看三级| 色噜噜成人av在线| 欧美成人在线直播| 亚洲永久无码7777kkk| 精品视频国产| 欧美成人免费全部观看天天性色| 日本网站在线免费观看| 日韩高清一级片| 亚洲综合日韩在线| 亚洲av成人精品毛片| 国产精品三级av| 欧美中文字幕在线观看视频 | 午夜久久久久久电影| 99精品免费在线观看| 96视频在线观看欧美| 精品久久久久99| 亚洲av熟女国产一区二区性色| 亚洲国产成人精品女人| 5252色成人免费视频| 菠萝蜜视频在线观看入口| 7777久久亚洲中文字幕| 国产成人av资源| 欧美在线播放一区二区| 黄网站在线免费看| 欧美视频在线视频| 久久发布国产伦子伦精品| 亚洲精品国产精品粉嫩| 久久夜精品香蕉| 最近免费中文字幕大全免费版视频| 极品少妇xxxx偷拍精品少妇| 精品国产乱码久久久久软件| 国产福利在线播放麻豆| 欧美视频在线观看 亚洲欧| 日本三级黄色网址| 欧美a一欧美| 超薄丝袜一区二区| 久久永久免费视频| 成人激情av网| 视色,视色影院,视色影库,视色网| 最近高清中文在线字幕在线观看1| 7777精品伊人久久久大香线蕉超级流畅| 在线观看国产免费视频| 婷婷色综合网| 国产精品美女久久久久久免费| 丰满人妻妇伦又伦精品国产| 最好看的中文字幕久久| 不卡av免费在线| 色天下一区二区三区| 欧美精品在线观看91| 这里只有精品999| 2020国产成人综合网| 欧美一区二区激情| 精品一区二区三区亚洲| 日韩在线精品视频| 五月激情丁香网| 久久老女人爱爱| heyzo亚洲| 开心激情综合| 欧美激情视频一区二区三区不卡| 国产又大又长又粗| 中文字幕中文字幕在线一区| 一区二区三区 日韩| 精品久久影视| 国产精品高精视频免费| 黄色免费在线播放| 日本黄色一区二区| 国产手机在线观看| 亚洲经典三级| 久久er99热精品一区二区三区| av中文字幕在线看| 精品美女在线观看| 久久夜色精品亚洲| 91蝌蚪porny| wwwxxx黄色片| 日韩精品午夜| 川上优av一区二区线观看| 国产视频在线播放| 欧美一区二区网站| 日本特黄特色aaa大片免费| 成人精品鲁一区一区二区| 欧美一区二区中文字幕| 亚洲人成精品久久久| 国产精品第三页| 日本中文字幕伦在线观看| 欧美巨大另类极品videosbest | 韩国av免费在线观看| 夜色激情一区二区| 国产不卡一二三| 久久久久99| 亚洲在线视频一区二区| 精品国产乱码一区二区三区| 欧美国产在线电影| 手机福利小视频在线播放| 欧美日韩国产区| 人妻一区二区视频| 久久se这里有精品| 高清欧美精品xxxxx| 你微笑时很美电视剧整集高清不卡| 国产精品欧美一区二区三区奶水| 在线中文字幕电影| 亚洲福利在线看| 伊人成人在线观看| 一区二区三区国产| 久久精品—区二区三区舞蹈| 精品无人区卡一卡二卡三乱码免费卡| 毛片av在线播放| 欧美精选一区二区三区| αv一区二区三区| 欧美日韩大片| 九九精品在线播放| 青青草观看免费视频在线| 欧美精品在线观看一区二区| 国产污片在线观看| 中文字幕不卡三区| 国产女人18毛片水真多18| 视频在线观看一区| 免费在线黄网站| 国产99精品| av日韩免费电影| 久久久成人av毛片免费观看| 久久男人资源视频| 美女隐私在线观看| 精品在线小视频| 亚洲av无码专区在线| 在线观看成人小视频| 国产精品suv一区二区| 国产精品天美传媒沈樵| 欧美夫妇交换xxx| 久久99精品久久久久久| 欧美在线观看成人| 欧美福利视频| 亚洲精品乱码视频| 亚洲区小说区图片区qvod| 91精品婷婷国产综合久久蝌蚪| 欧美日韩不卡| 777777777亚洲妇女| av网站免费在线观看| 色婷婷av一区二区三区久久| 男人天堂网在线观看| 亚洲第一精品福利| 国产绿帽刺激高潮对白| 欧美亚一区二区| 一级黄色大片视频| 欧美日韩国产精品一区二区三区四区| 国产精品成人免费观看| 中文字幕一区二区三区蜜月 | 国产三级三级看三级| 中文欧美日韩| 97视频久久久| 亚洲高清久久| 国产一线二线三线女| 午夜欧美精品| 黄色网在线视频| 综合天堂av久久久久久久| 伊人久久大香线蕉av一区| 国产日韩视频在线| 欧美三级网色| 色综合综合色| 日本一区免费在线观看| 日韩成人一级| 精品无码久久久久国产| 牛牛影视久久网| 蜜桃91精品入口| 久久99国内| 日韩欧美一区二区视频在线播放| 欧美人与牛zoz0性行为| 日韩成人在线资源| 欧美日韩中文一区二区| 亚洲bbw性色大片| 日韩精品二区| 日韩国产精品毛片| 中文字幕免费一区二区| 中国丰满熟妇xxxx性| 国一区二区在线观看| 日韩小视频在线播放| 久久国产88| 日本激情视频在线播放| 精彩视频一区二区| 欧美人与性动交α欧美精品| 成人午夜电影网站| 素人fc2av清纯18岁| 中文一区在线播放| 日韩国产第一页| 一区二区三区四区高清精品免费观看| 久久午夜鲁丝片午夜精品| 亚洲成av人片一区二区| 久久国产视频一区| 欧美三级中文字幕在线观看| 国产伦理吴梦梦伦理| 亚洲成人三级在线| 青青草在线免费视频| 中文字幕亚洲国产| a级影片在线| 欧美一区在线直播| 欧洲亚洲精品| 国产精品sss| 国产一区二区三区四区五区传媒 | 欧美亚洲综合另类| 国产精品一区二区免费视频| 亚洲国产福利在线| av中文天堂在线| 色综合视频网站| 88xx成人免费观看视频库| 成人亚洲激情网| 欧美调教网站| 正在播放91九色| 亚洲深夜av| 日韩av自拍偷拍| 91丝袜国产在线播放| 激情高潮到大叫狂喷水| 精品久久久久久电影| 一级特黄aaa大片| 日韩高清不卡av| 黄色成人在线观看| 欧美在线免费视频| 精品国产乱码一区二区三区| 欧美精品一区三区在线观看| 欧美在线网址| 性生交免费视频| 成人动漫一区二区三区| 亚洲精品自拍视频在线观看| 精品国产乱码久久久久久婷婷| 97人妻精品一区二区三区视频| 亚洲美女激情视频| 羞羞污视频在线观看| 国产精品国产三级国产专播精品人 | 91丝袜脚交足在线播放| jlzzjlzz亚洲女人| 国产h视频在线播放| 国产精品中文欧美| xxxxx99| 色综合色综合色综合色综合色综合 | 国产剧情一区在线| 能直接看的av| 欧美午夜性色大片在线观看| 午夜精品久久久久久久爽| 少妇高潮久久77777| 欧美大片免费观看网址| 国内一区在线| 欧美日韩一卡| 黄色片子免费看| 亚洲欧美电影一区二区| 中文字幕在线网站| 亚洲深夜福利在线| 英国三级经典在线观看| 国产精品久久久久久久久婷婷| 国产精品99久久精品| 免费一区二区三区在线观看| 久久久亚洲欧洲日产国码αv| 日韩欧美国产亚洲| 亚洲第一网站男人都懂| 国产又色又爽又黄刺激在线视频| 91免费在线视频网站| 国产精品7m凸凹视频分类| 999在线观看| 国产精品久久777777| 一本色道久久综合亚洲| 色综合亚洲精品激情狠狠| 在线观看欧美日韩电影| 快播亚洲色图| 久久精品在线| 一级肉体全黄裸片| 欧美最猛性xxxxx直播| 风间由美一区| 国产精品视频久久久久| 久久要要av| 亚洲18在线看污www麻豆 | 日本三级视频在线| 欧美精品一区二| 国产伦久视频在线观看| 久久国产精品亚洲va麻豆| 国产日韩一区二区三区在线播放| av黄色一级片| 欧美色播在线播放| 国产精品毛片一区二区三区四区| 国产精品久久久久免费a∨大胸| av亚洲免费| 制服丝袜中文字幕第一页| 亚洲欧美aⅴ...| 六月婷婷综合网| 欧美亚洲国产成人精品| 精品一区二区三| 国产欧美精品一二三| 亚洲成人高清在线| 日本午夜在线| 国产精品一区二区三区在线播放| 888久久久| 国产污在线观看| 色诱视频网站一区| 麻豆最新免费在线视频| 91手机在线视频| 久久福利一区| 综合五月激情网| 精品999在线播放| 日韩中文影院| 国产高清不卡无码视频| 99久久久精品| 中文字幕日日夜夜| 色综合男人天堂| 欧美色女视频| 亚洲色偷偷色噜噜狠狠99网| 日本精品一区二区三区高清| 中日韩高清电影网| 欧美日韩国产一二| 国产美女精品在线| 日本在线播放视频| 裸体女人亚洲精品一区| 亚洲v天堂v手机在线| 999在线精品视频| 欧美性色19p| 菠萝菠萝蜜在线视频免费观看 | 毛片在线播放网站| 亚洲一区亚洲二区| 日韩二区在线观看| 日本视频免费在线| 久久精品国产一区二区电影|