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

Nacos 服務訂閱流程全解析

開發
本文將基于之前源碼搭建系列的前置步驟針對nacos服務訂閱流程源碼進行深入梳理和分析,希望對你有幫助。

本文將基于之前源碼搭建系列的前置步驟針對nacos服務訂閱流程源碼進行深入梳理和分析,希望對你有幫助。

客戶端發起服務訂閱

為了方便講解,筆者基于CommandLineRunner 這個擴展點主動在服務完成初始化之后通過NamingService 的subscribe發起服務訂閱請求:

@Component
public class TestRunner implements CommandLineRunner {

    private final static Logger log = LoggerFactory
            .getLogger(TestRunner.class);
    @Override
    public void run(String... args) throws Exception {
        //主動向nacos發起服務訂閱請求
        NamingService naming = NamingFactory.createNamingService("127.0.0.1:8848");
        //主動訂閱nacos-provider這個服務的實例信息
        naming.subscribe("nacos-provider", event -> {
            if (event instanceof NamingEvent) {
                //日志打印監聽到的服務名稱和結果
                log.info("監聽到服務名稱:{},實例信息:{}", ((NamingEvent) event).getServiceName(),
                        ((NamingEvent) event).getInstances());
            }

        });
    }
}

查看NamingService 的subscribe源碼可知,該方法會基于我們給定的服務名稱以及分組等信息主動發起RPC主動向nacos獲取nacos-provider的實例信息:

@Override
    public void subscribe(String serviceName, String groupName, List<String> clusters, EventListener listener)
            throws NacosException {
       //......
       //基于RPC代理發起服務訂閱
        clientProxy.subscribe(serviceName, groupName, clusterString);
    }

而clientProxy(底層就是NamingClientProxyDelegate)的執行邏輯也比較簡單:

  • 從緩存管理器serviceInfoHolder中嘗試獲取需要訂閱的服務信息。
  • 如果不存在或者未訂閱則向nacos發起RPC請求。
  • 通過serviceInfoHolder緩存訂閱的服務實例信息。

對應的我們給出NamingClientProxyDelegate獲取服務實例的源碼段,和上述語義一致,讀者可以參考注釋了解一下過程:

@Override
    public ServiceInfo subscribe(String serviceName, String groupName, String clusters) throws NacosException {
       //......
       
        //查看緩存中是否存在訂閱的服務實例
       //......
        ServiceInfo result = serviceInfoHolder.getServiceInfoMap().get(serviceKey);
        //如果不存在或者未訂閱則發起RPC請求
        if (null == result || !isSubscribed(serviceName, groupName, clusters)) {
            result = grpcClientProxy.subscribe(serviceName, groupName, clusters);
        }
        //將查詢或者請求結果緩存到本地serviceInfoMap中
        serviceInfoHolder.processServiceInfo(result);
        return result;
    }

默認情況下,我們的緩存是沒有訂閱服務的信息的,所以會觸發RPC請求,然后nacos就會返回當前服務的元信息,如下便是從nacos服務端返回的nacos-provider實例節點信息,后續如果需要調用,都會基于這份元信息發起請求:

我們也可以通過抓包工具看到這個請求的詳細內容,如下圖所示,可以看到筆者基于nacos客戶端端口64393作為源端口號,nacos服務端端口號即9848作為目的端口進行抓取捕獲到的TCP網絡包,可以看到這個訂閱的RPC接口請求參數詳情:

解碼后即可看到這個請求的數據就是源碼調試時看到的請求參數,也就是對于nacos-provider的訂閱:

基于服務端的返回結果,客戶端會進行如下操作:

  • 將實例信息更新到本地緩存。
  • 查看對應服務實例在本地緩存中的數據,并和服務端響應的數據進行比對,若一致則說明實例信息沒有更新,直接返回,如果發現不一致,進入步驟3。
  • 則說明服務發生變化,則基于零拷貝將響應結果寫入本地持久化,便于后續服務重啟恢復數據。

public ServiceInfo processServiceInfo(ServiceInfo serviceInfo) {
  //獲取原有服務信息
        String serviceKey = serviceInfo.getKey();
         ServiceInfo oldService = serviceInfoMap.get(serviceInfo.getKey());
        //......
        //以服務名作為key,實例信息作為value寫入緩存
        serviceInfoMap.put(serviceInfo.getKey(), serviceInfo);
        
        //比對實例,如果不一致則說明服務發生變化
        boolean changed = isChangedServiceInfo(oldService, serviceInfo);
        //......
        if (changed) {
            //......
            //如果發生變化則基于零拷貝刷盤技術將訂閱的服務信息寫入本地        
            DiskCache.write(serviceInfo, cacheDir);
        }
        return serviceInfo;
    }

Nacos基于緩存發起回復并注冊該客戶端

了解了客戶端的訂閱請求之后,我們再來聊聊nacos是如何處理該請求的,在之前的文章中我們說過,nacos是通過grpcCommonRequestAcceptor處理客戶端的RPC請求,對應服務訂閱請求,服務端收到的將會收到一個類型為SubscribeServiceRequest 的服務訂閱請求:

找到對應的處理器SubscribeServiceRequestHandler之后,grpcCommonRequestAcceptor會從RPC請求報文中拿到參數交由該處理器進行處理:

對應的我們也給出nacos服務端處理客戶端服務訂閱請求的代碼段,即位于GrpcRequestAcceptor的request方法:

@Override
    public void request(Payload grpcRequest, StreamObserver<Payload> responseObserver) {
        //......
        traceIfNecessary(grpcRequest, true);
        //需要使用的服務器類型,例如服務注冊就是 InstanceRequest
        String type = grpcRequest.getMetadata().getType();
        long startTime = System.nanoTime();
        
        //......
        //基于type到找到對應的請求處理器
        RequestHandler requestHandler = requestHandlerRegistry.getByRequestType(type);
        //......
        
        //......
        
        Request request = (Request) parseObj;
        try {
            //......
            //解析參數并處理該請求
            Response response = requestHandler.handleRequest(request, requestMeta);
            //......
        } catch (Throwable e) {
           //......
        }
        
    }

隨后SubscribeServiceRequestHandler的handle就會執行如下步驟:

  • 基于參數生成要獲取的服務請求參數service,service包含要請求的服務名稱、命名空間、分組等信息。
  • 從緩存serviceStorage管理的緩存serviceDataIndexes中查詢出對應服務實例即nacos-provider的所有實例信息。
  • 過濾出有效即健康可用的實例響應給客戶端。

對應SubscribeServiceRequestHandler的源碼如下,讀者可參考注釋查閱:

public SubscribeServiceResponse handle(SubscribeServiceRequest request, RequestMeta meta) throws NacosException {
        //解析參數信息
        String namespaceId = request.getNamespace();
        String serviceName = request.getServiceName();
        String groupName = request.getGroupName();
        String app = request.getHeader("app", "unknown");
        String groupedServiceName = NamingUtils.getGroupedName(serviceName, groupName);
        //基于參數生成服務元信息,即要獲取的服務信息
        Service service = Service.newService(namespaceId, groupName, serviceName, true);
      //......
        //基于serviceStorage從緩存中拿到訂閱的服務信息,再通過selectInstancesWithHealthyProtection篩選出健康的示例
        ServiceInfo serviceInfo = ServiceUtil.selectInstancesWithHealthyProtection(serviceStorage.getData(service),
                metadataManager.getServiceMetadata(service).orElse(null), subscriber.getCluster(), false,
                true, subscriber.getIp());
        //......
        //返回結果
        return new SubscribeServiceResponse(ResponseCode.SUCCESS.getCode(), "success", serviceInfo);
    }

小結

自此我們通過源碼閱讀、網絡抓包、斷點調測查看等方式對nacos服務訂閱的源碼進行的較為詳細的分析,希望對你有幫助。

責任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關推薦

2025-06-03 08:25:00

Nacos開發服務

2025-05-29 08:35:00

Nacos服務注冊開發

2021-08-12 06:52:01

Nacos服務機制

2021-08-16 07:26:42

服務訂閱機制

2021-09-06 09:46:26

Dubbo 服務端開發

2018-11-28 15:15:52

大數據AI安防

2010-02-06 09:38:42

Android調用服務

2022-01-14 14:50:14

SpringBootymlJava

2022-01-13 17:24:04

SpringBootYml監聽器

2024-03-18 07:48:00

大語言模型NVIDIA生成式 AI

2021-04-19 07:57:23

Spring 源碼GetBean

2025-07-02 08:10:01

StarRocks物化視圖MV

2024-11-11 09:51:46

Nginx部署負載

2022-05-14 22:27:40

Nacos訂閱機制定時器

2012-05-30 09:26:57

服務器虛擬化

2025-08-29 01:11:00

2022-05-19 07:39:43

Nacos訂閱機制線程類

2022-05-02 22:01:49

訂閱模式Eureka推送模式

2011-02-22 15:51:41

2019-07-28 21:05:47

ICMPIP網絡協議
點贊
收藏

51CTO技術棧公眾號

粉嫩91精品久久久久久久99蜜桃| 欧美一二三区视频| 国产精品亚洲综合在线观看| 尤物视频一区二区| 精品免费国产| 中文字幕一区二区三区人妻四季| 欧美 日韩 国产 一区| 日韩精品免费在线视频| 亚洲另类第一页| 高清精品在线| 最新日韩av在线| 欧美精品一区二区三区四区五区| 国产一区二区在线视频聊天| 国产一区二区高清| 久久成人在线视频| 精品人妻无码一区| 国产精品丝袜在线播放| 欧美人伦禁忌dvd放荡欲情| 日韩五码在线观看| v片在线观看| 日本一区二区久久| 久久精品国产精品国产精品污| 艳妇乳肉豪妇荡乳av| 中文久久精品| 久久久久久免费精品| 精品一区二区在线观看视频| 少妇一区二区三区| 欧美成人高清电影在线| 最新天堂在线视频| 国精产品一区二区三区有限公司| 亚洲第一在线播放| 精品一区在线| 精品日本一线二线三线不卡| 亚洲成人久久电影| 天堂一区在线观看| 欧美极度另类| 欧美性xxxx极品hd欧美风情| 成年人网站国产| 在线观看午夜av| 国产精品久久久久7777按摩| 欧美一区亚洲二区| 视频在线不卡| 99久久综合国产精品| 国产成人成网站在线播放青青| 91久久国语露脸精品国产高跟| 日韩福利电影在线观看| 国产91精品视频在线观看| 久久精品国产亚洲av高清色欲| 欧美jizzhd精品欧美巨大免费| 精品国内产的精品视频在线观看| 国产一区二区三区四区五区六区 | 欧美色图国产精品| 精品性高朝久久久久久久| 亚洲一级av无码毛片精品| 亚洲不卡在线| 精品久久一区二区三区| 无码人妻丰满熟妇区毛片蜜桃精品| 亚洲一区av| 日韩一级黄色片| 成人做爰69片免费| 98视频精品全部国产| 亚洲精品一线二线三线无人区| 午夜性福利视频| 国产精品网址| 亚洲欧美日韩精品久久奇米色影视| 鲁大师私人影院在线观看| 丝袜连裤袜欧美激情日韩| 日韩国产精品一区| 精品无码在线观看| 久久久久久久久国产一区| 久久精品久久久久| 免费中文字幕视频| 亚洲欧美久久久| 国产精品老女人精品视频| 一级片在线观看视频| 国产精品一级片在线观看| 国产不卡一区二区在线观看| 欧美偷拍视频| 国产精品福利一区| 欧美性猛交内射兽交老熟妇| а√在线天堂官网| 欧美特级限制片免费在线观看| 激情久久综合网| 国产极品模特精品一二| 亚洲欧美一区二区三区久久| 在线免费看视频| 欧美区国产区| 国产成人高清激情视频在线观看| 国产精品久久欧美久久一区| 99久久夜色精品国产网站| 人偷久久久久久久偷女厕| 成人免费高清| 日韩欧美高清在线视频| 成人av毛片在线观看| 国产精品网址| 日日噜噜噜夜夜爽亚洲精品| 日本五十熟hd丰满| 麻豆免费看一区二区三区| 国产精品v欧美精品v日韩| 欧美日韩视频精品二区| 亚洲精品精品亚洲| 高清一区二区视频| 红杏视频成人| xxxxx成人.com| 日韩欧美一级视频| 国产毛片精品视频| 日韩欧美精品一区二区三区经典 | 精品国产一区一区二区三亚瑟 | 成人黄色777网| 一区二区不卡在线视频 午夜欧美不卡'| 激情av在线| 69堂精品视频| 先锋影音av在线| 一本久久综合| 成人区精品一区二区| 亚洲图片88| 91福利资源站| 免费a在线观看播放| 午夜天堂精品久久久久| 国产精品久久久久久久久久久不卡| 嫩草影院一区二区| 亚洲免费观看在线视频| 久草福利视频在线| 国产亚洲一卡2卡3卡4卡新区 | 中文字幕无码精品亚洲资源网久久| 日韩黄色三级| 在线观看国产欧美| 无码一区二区三区在线观看| 99久久久精品| www插插插无码视频网站| www.久久草.com| 日韩天堂在线视频| 在线免费观看视频网站| 国产三级欧美三级| caopor在线视频| 偷拍亚洲精品| 55夜色66夜色国产精品视频 | 99久久综合国产精品| 国产女主播自拍| 国产精品美女在线观看直播| 久久青草福利网站| 亚洲欧美强伦一区二区| 亚洲最大色网站| 四虎永久免费观看| 亚洲精选国产| 久久riav二区三区| 婷婷综合六月| 国产一区二区激情| 中文字幕 亚洲视频| 国产精品青草久久| 午夜剧场高清版免费观看| 国产电影一区二区在线观看| 国产欧美久久一区二区| 免费av在线网址| 91精品国产乱| 国产精久久久久久| 91视频com| 8x8x最新地址| 久久久久久久久99精品大| 91久久精品www人人做人人爽 | 亚洲午夜免费电影| 国产激情视频网站| 美女91精品| 亚洲欧洲精品一区| 秋霞影院一区| 午夜精品久久久久久久久久久久久| 无码精品在线观看| 在线观看一区不卡| 天天色影综合网| 成人av网站免费| 亚洲中文字幕久久精品无码喷水| 岳的好大精品一区二区三区| 国产精品极品尤物在线观看| 黄色网址在线免费播放| 精品精品国产高清a毛片牛牛| 日本天堂在线视频| 国产精品色哟哟| 免费看黄色片的网站| 六月婷婷一区| 黄瓜视频免费观看在线观看www | 国产美女视频免费| 精品一区二区男人吃奶| 国产成人欧美在线观看| 精品国产丝袜高跟鞋| 亚洲国产精彩中文乱码av| 狠狠狠狠狠狠狠| 亚洲愉拍自拍另类高清精品| 爱爱免费小视频| 国产乱人伦偷精品视频免下载| av女优在线播放| 成人系列视频| 国产综合av一区二区三区| 久久精品黄色| 欧洲中文字幕国产精品| www.在线视频| 在线观看欧美日韩| 午夜成人免费影院| 69av一区二区三区| 亚洲成人第一网站| 亚洲一卡二卡三卡四卡| 欧美午夜激情影院| av不卡一区二区三区| 手机免费av片| 久久都是精品| 日本一本中文字幕| 国产精品99久久久久久动医院| 极品日韩久久| 深夜福利一区二区三区| 国产精品自拍网| 国偷自产一区二区免费视频| 欧美激情在线有限公司| 久操视频在线播放| 最近2019年手机中文字幕| 五十路在线观看| 欧美r级电影在线观看| 一级片在线观看视频| 日本韩国欧美在线| 久久久午夜影院| 亚洲va国产天堂va久久en| 天天操夜夜操av| 国产精品久久99| 在线观看国产精品一区| 97精品久久久久中文字幕| 中文字幕1区2区| 国产剧情一区在线| 亚洲黄色av片| 久久国产精品第一页| 欧洲熟妇精品视频| 久久精品系列| 成熟老妇女视频| 久久久精品网| 欧美日韩中文在线视频| 99精品免费视频| 黄色国产一级视频| 亚洲精品孕妇| 欧美 日韩 国产 高清| 国产日韩1区| 亚洲中文字幕无码专区| 国产精品资源| 啊啊啊一区二区| 新狼窝色av性久久久久久| 又粗又黑又大的吊av| 校园春色综合网| 国产97色在线 | 日韩| 日韩精品一区第一页| 亚洲精品怡红院| 毛片不卡一区二区| 午夜啪啪小视频| 国产精品中文字幕日韩精品| 欧洲在线免费视频| 国产99精品视频| 视频免费在线观看| 26uuu精品一区二区在线观看| 国产av自拍一区| 国产精品污www在线观看| 欧美xxxx精品| 亚洲视频香蕉人妖| 免费一级肉体全黄毛片| 亚洲成人av电影在线| 国产69精品久久久久久久久久| 欧美性xxxxxxxxx| 在线免费a视频| 日韩区在线观看| 天堂网在线播放| 亚洲无亚洲人成网站77777| 日本亚洲精品| 久久久久久亚洲精品不卡| 色一区二区三区| 国产精品欧美亚洲777777 | 国产精品入口免费| 中国av一区| 亚洲欧美日韩不卡| 亚洲国产精品第一区二区三区| 日本精品www| 蜜臀av一区二区在线免费观看| 欧美一级视频在线| 9久草视频在线视频精品| 无码人妻aⅴ一区二区三区69岛| 亚洲欧洲av另类| 国产成人精品一区二三区| 精品视频免费在线| 人妻精品无码一区二区| 一区二区三区国产视频| 后进极品白嫩翘臀在线播放| 国产成人短视频| 99久久人爽人人添人人澡| 欧美一区三区二区在线观看| 欧美国内亚洲| 日韩欧美在线免费观看视频| 国产成人av影院| 男人天堂资源网| 欧美视频二区36p| av小说天堂网| 国产亚洲精品久久久久久| 怡红院红怡院欧美aⅴ怡春院| 欧美性视频在线| 6080亚洲理论片在线观看| 日韩欧美三级一区二区| 国产精品激情电影| 中文字幕第88页| 久久久久久免费网| 免费无码毛片一区二区app| 精品视频资源站| 日本ー区在线视频| 欧美极品少妇与黑人| 日本黄色成人| 日本免费高清不卡| 99国产精品久久久久久久成人热| 天天做天天干天天操| 亚洲国产精品99久久久久久久久 | 欧美午夜一区二区三区| 手机看片国产1024| 欧美大片在线免费观看| 欧美视频免费看| 日本不卡二区高清三区| 精品动漫3d一区二区三区免费| 中文字幕在线观看日| 国产拍欧美日韩视频二区| 欧美一级视频免费观看| 精品国产成人系列| 午夜在线激情影院| 91在线观看免费高清| 色婷婷综合网| 污色网站在线观看| 亚洲国产成人在线| 中文字幕 国产精品| 国产视频在线观看一区二区| 欧美精品videosex| 亚洲精品日韩av| 中文字幕一区二区精品区| 色啦啦av综合| 成人欧美一区二区三区视频网页| 中文字幕一级片| 在线观看免费高清视频97| 欧美日韩精品免费观看视完整| 久久天天狠狠| 久久久久国产精品午夜一区| 97人妻天天摸天天爽天天| 亚洲成av人综合在线观看| 国精产品一品二品国精品69xx| 久久久久久久久中文字幕| 国产日韩三级| 成年人视频网站免费观看| 2017欧美狠狠色| 老熟妇一区二区三区| 亚洲少妇激情视频| 亚洲成人激情社区| 亚洲精品一卡二卡三卡四卡| 麻豆成人在线观看| 国产麻豆a毛片| 欧美一区日韩一区| 国产天堂在线播放视频| 精品国产一区二区三| 久久亚洲一区| 国产性生活大片| 欧美精品一区视频| 韩国主播福利视频一区二区三区| 欧美在线日韩精品| 精品一区二区在线免费观看| 亚洲熟女www一区二区三区| 精品久久久久香蕉网| 欧美aa在线观看| 三区精品视频| 国产一区二区三区高清播放| 久久在线视频精品| 精品亚洲一区二区三区在线观看| 亚洲承认视频| 国产香蕉一区二区三区| 不卡的av在线| 少妇一级淫片日本| 久久国产精品久久久久久| eeuss国产一区二区三区四区| 日韩av资源在线| 成人欧美一区二区三区1314| 黄色www视频| 国产精品久久色| 好看不卡的中文字幕| 国产免费看av| 日韩一区国产二区欧美三区| 韩国精品一区| 婷婷视频在线播放| 91在线观看一区二区| 在线观看免费视频一区| 久久久久久中文| 青青草97国产精品麻豆| 理论片大全免费理伦片| 欧美色偷偷大香| 高清视频在线观看三级| 亚洲一区二区三区精品动漫| 成人高清免费观看| 一区二区www| 欧美资源在线观看| 午夜久久一区| 少妇视频在线播放| 亚洲精品国产免费| 精品国产乱码一区二区三区| 激情网站五月天| 亚洲成av人片一区二区三区| 色影院视频在线| 青青成人在线|