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

Nacos源碼—8.Nacos升級(jí)gRPC分析三

發(fā)布于 2025-5-15 20:11
瀏覽
0收藏

大綱

7.服務(wù)端對(duì)服務(wù)實(shí)例進(jìn)行健康檢查

8.服務(wù)下線如何注銷注冊(cè)表和客戶端等信息

9.事件驅(qū)動(dòng)架構(gòu)源碼分析

7.服務(wù)端對(duì)服務(wù)實(shí)例進(jìn)行健康檢查

(1)服務(wù)端對(duì)服務(wù)實(shí)例進(jìn)行健康檢查的設(shè)計(jì)邏輯

(2)服務(wù)端對(duì)服務(wù)實(shí)例進(jìn)行健康檢查的源碼

(3)服務(wù)端檢查服務(wù)實(shí)例不健康后的注銷處理

(1)服務(wù)端對(duì)服務(wù)實(shí)例進(jìn)行健康檢查的設(shè)計(jì)邏輯

一.首先會(huì)獲取所有客戶端的Connection連接對(duì)象

Connection連接對(duì)象里有個(gè)屬性叫l(wèi)astActiveTime,表示的是最后存活時(shí)間。

二.然后判斷當(dāng)前時(shí)間-最后存活時(shí)間是否大于20s

如果大于,則把該Connection連接對(duì)象的connectionId放入到一個(gè)集合里。這個(gè)集合是一個(gè)名為outDatedConnections的待移除集合Set,此時(shí)該Connection連接對(duì)象并不會(huì)馬上刪除。

三.當(dāng)判斷完全部的Connection連接對(duì)象后會(huì)遍歷outDatedConnections集合

向遍歷到的Connection連接對(duì)象發(fā)起一次請(qǐng)求,確認(rèn)是否真的下線。如果響應(yīng)成功,則往successConnections集合中添加connectionId,并且刷新Connection連接對(duì)象的lastActiveTime屬性。這個(gè)機(jī)制有一個(gè)專業(yè)的名稱叫做:探活機(jī)制。

四.遍歷待移除集合進(jìn)行注銷并且在注銷之前先判斷一下是否探活成功

也就是connectionId存在于待移除集合outDatedConnections中,但是不存在于探活成功集合successConnections中,那么這個(gè)connectionId對(duì)應(yīng)的客戶端就會(huì)被注銷掉。

(2)服務(wù)端對(duì)服務(wù)實(shí)例進(jìn)行健康檢查的源碼

對(duì)服務(wù)實(shí)例進(jìn)行健康檢查的源碼入口是ConnectionManager的start()方法。

@Service
public class ConnectionManager extends Subscriber<ConnectionLimitRuleChangeEvent> {
Map<String, Connection> connections = new ConcurrentHashMap<>();

//Start Task:Expel the connection which active Time expire.
@PostConstruct
public void start() {
    //Start UnHealthy Connection Expel Task.
    RpcScheduledExecutor.COMMON_SERVER_EXECUTOR.scheduleWithFixedDelay(new Runnable() {
        @Override
        public void run() {
            ...
            //一.首先獲取所有的連接
            Set<Map.Entry<String, Connection>> entries = connections.entrySet();
            ...
            //二.然后判斷客戶端是否超過(guò)20s沒(méi)有發(fā)來(lái)心跳信息了,如果是則會(huì)將clientId加入outDatedConnections集合中
            Set<String> outDatedConnections = new HashSet<>();
            long now = System.currentTimeMillis();


            for (Map.Entry<String, Connection> entry : entries) {
                Connection client = entry.getValue();
                String clientIp = client.getMetaInfo().getClientIp();
                AtomicInteger integer = expelForIp.get(clientIp);
                if (integer != null && integer.intValue() > 0) {
                    integer.decrementAndGet();
                    expelClient.add(client.getMetaInfo().getConnectionId());
                    expelCount--;
                } else if (now - client.getMetaInfo().getLastActiveTime() >= KEEP_ALIVE_TIME) {//判斷心跳時(shí)間
                    //添加到待移除列表
                    outDatedConnections.add(client.getMetaInfo().getConnectionId());
                }
            }
            ...
            //client active detection.
            //三.初次檢測(cè)完超過(guò)20s的Connection連接對(duì)象后,并不會(huì)立馬進(jìn)行刪除,而是進(jìn)行探活,服務(wù)端主動(dòng)請(qǐng)求客戶端,來(lái)確認(rèn)是否真的下線
            Loggers.REMOTE_DIGEST.info("Out dated connection ,size={}", outDatedConnections.size());
            if (CollectionUtils.isNotEmpty(outDatedConnections)) {
                Set<String> successConnections = new HashSet<>();
                final CountDownLatch latch = new CountDownLatch(outDatedConnections.size());
                //遍歷超過(guò)20s沒(méi)有心跳的客戶端clientId
                for (String outDateConnectionId : outDatedConnections) {
                    try {
                        Connection connection = getConnection(outDateConnectionId);
                        if (connection != null) {
                            ClientDetectionRequest clientDetectionRequest = new ClientDetectionRequest();
                            //調(diào)用GrpcConnection.asyncRequest()方法異步發(fā)送請(qǐng)求
                            connection.asyncRequest(clientDetectionRequest, new RequestCallBack() {
                                @Override
                                public Executor getExecutor() {
                                    return null;
                                }


                                @Override
                                public long getTimeout() {
                                    return 1000L;
                                }


                                @Override
                                public void onResponse(Response response) {
                                    latch.countDown();
                                    if (response != null && response.isSuccess()) {
                                        //響應(yīng)成功刷新心跳時(shí)間
                                        connection.freshActiveTime();
                                        //并且加入到探活成功的集合列表中
                                        successConnections.add(outDateConnectionId);
                                    }
                                }

                                @Override
                                public void onException(Throwable e) {
                                    latch.countDown();
                                }
                            });
                            Loggers.REMOTE_DIGEST.info("[{}]send connection active request ", outDateConnectionId);
                        } else {
                            latch.countDown();
                        }                            
                    } catch (ConnectionAlreadyClosedException e) {
                        latch.countDown();
                    } catch (Exception e) {
                        Loggers.REMOTE_DIGEST.error("[{}]Error occurs when check client active detection ,error={}", outDateConnectionId, e);
                        latch.countDown();
                    }
                }


                latch.await(3000L, TimeUnit.MILLISECONDS);
                Loggers.REMOTE_DIGEST.info("Out dated connection check successCount={}", successConnections.size());
                //經(jīng)過(guò)探活還是不成功的Connection連接對(duì)象,就準(zhǔn)備進(jìn)行移除了
                //遍歷20s沒(méi)有心跳的客戶端,準(zhǔn)備移除客戶端信息
                for (String outDateConnectionId : outDatedConnections) {
                    //判斷探活是否成功,如果成功了則不需要移除
                    if (!successConnections.contains(outDateConnectionId)) {
                        Loggers.REMOTE_DIGEST.info("[{}]Unregister Out dated connection....", outDateConnectionId);
                        //執(zhí)行客戶端注銷邏輯
                        unregister(outDateConnectionId);
                    }
                }
            }
            ...
        }
    }, 1000L, 3000L, TimeUnit.MILLISECONDS);
}
...

}
(3)服務(wù)端檢查服務(wù)實(shí)例不健康后的注銷處理

進(jìn)行注銷處理的方法是ConnectionManager的unregister()方法。該方法主要會(huì)移除Connection連接對(duì)象 + 清除一些數(shù)據(jù),以及發(fā)布一個(gè)ClientDisconnectEvent客戶端注銷事件。

標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
欧美另类专区| jazzjazz国产精品久久| 1000部国产精品成人观看| 91久久国产自产拍夜夜嗨| 国产亚洲成人精品| 精品在线手机视频| 欧美一区二区三区性视频| 精品人妻少妇一区二区| jizz日韩| www.av精品| 成人黄色午夜影院| 毛片在线免费视频| 伊人青青综合网| 亚洲色图25p| 少妇献身老头系列| 亚洲天堂1区| 午夜视黄欧洲亚洲| 国产又爽又黄ai换脸| 亚洲人妻一区二区| 国产精品系列在线播放| 国产精品人人做人人爽| 欧美一级视频免费观看| 自拍偷拍欧美专区| 中文字幕日韩精品在线| 麻豆国产精品一区| 91免费精品国偷自产在线在线| 欧美亚洲高清一区| 欧美,日韩,国产在线| av在线免费网址| 国产精品久久久久久久久免费丝袜| 国产亚洲欧美一区二区| 精品久久久无码中文字幕| 蜜乳av一区二区| 国产成人在线精品| 精品黑人一区二区三区| 亚洲美女色禁图| 欧美成人sm免费视频| 在线观看免费小视频| 欧美日韩导航| 亚洲精美色品网站| 精品人妻伦一二三区久| 亚洲啊v在线免费视频| 4438成人网| 最新免费av网址| 精品久久99| 欧美日韩在线免费视频| 免费看污污网站| 国产美女久久| 欧美老女人第四色| 日本在线播放一区二区| 95精品视频| 欧美精品在线一区二区三区| 国产精品v日韩精品v在线观看| 日本欧美日韩| 欧洲国内综合视频| 亚洲欧美自拍另类日韩| 久久爱.com| 8x福利精品第一导航| 夜夜爽久久精品91| 日韩精品中文字幕吗一区二区| 欧美一区二区成人6969| 久久aaaa片一区二区| 久久爱www.| 精品国产1区二区| 97精品人妻一区二区三区蜜桃| 久久这里只有精品一区二区| 亚洲第一视频网| 在线 丝袜 欧美 日韩 制服| 亚州综合一区| 中文字幕成人在线| 免费黄色激情视频| 欧美福利一区| 97av在线视频| 中文字幕一区二区三区人妻四季| 久久精品99国产精品| 999在线免费观看视频| 日韩一级免费视频| 国产午夜精品理论片a级大结局| 日韩精品伦理第一区| 日韩大片在线永久免费观看网站| 亚洲乱码精品一二三四区日韩在线| www.99riav| 成人动漫一区| 欧美一区国产二区| 捆绑裸体绳奴bdsm亚洲| 国产一区二区在线| 久久99精品视频一区97| 久久一区二区三区视频| 日韩电影在线观看网站| 91九色蝌蚪成人| 毛片网站在线观看| 亚洲摸摸操操av| 怡红院av亚洲一区二区三区h| 国产成人精选| 精品国产sm最大网站| 91成人在线免费视频| 欧美三区不卡| 国产精品久久久久久久久影视| av在线资源观看| 久久品道一品道久久精品| 视频一区二区视频| 亚洲天堂导航| 日韩欧美电影在线| www色com| 亚洲欧洲综合| 91沈先生作品| 国模精品一区二区| 亚洲一区在线视频观看| 91极品视频在线观看| 成人av地址| 日韩一区二区在线视频| 国产欧美日韩另类| 国产麻豆精品在线| 神马影院我不卡午夜| 成人av影院在线观看| 欧美日韩精品三区| 国产精品伦子伦| 欧美日韩视频一区二区三区| 国产精品精品久久久| 午夜18视频在线观看| 亚洲精品水蜜桃| 一道本在线免费视频| 亚洲精品蜜桃乱晃| 欧美高清视频在线播放| 91国偷自产中文字幕久久| 久久色在线观看| 日韩欧美国产综合在线| 玖玖精品一区| 久久九九免费视频| 在线观看免费观看在线| 国产亚洲成aⅴ人片在线观看| 久久久性生活视频| youjizz欧美| 欧美成人国产va精品日本一级| 一区二区三区午夜| 国产精品麻豆欧美日韩ww| 50路60路老熟妇啪啪| 欧美xxxx在线| 97香蕉久久超级碰碰高清版 | www.自拍偷拍| 伊人影院久久| 国产91精品一区二区绿帽| 国产传媒在线播放| 555www色欧美视频| 中日韩一级黄色片| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲xxxx18| 黄色网址免费在线观看| 3d动漫精品啪啪1区2区免费| 熟女少妇a性色生活片毛片| 久久99精品久久久| 桥本有菜av在线| 久久久91麻豆精品国产一区| 久久中文字幕在线视频| 国产av无码专区亚洲a∨毛片| 亚洲日本一区二区三区| 波多野结衣三级视频| 欧美日韩p片| 国产一区二区高清不卡| 日本不卡1234视频| 国产亚洲精品美女久久久久| 探花国产精品一区二区| 国产精品国产精品国产专区不片| 欧美特黄aaa| 欧美精选一区| 久久久久久国产精品一区| 中文字幕在线直播| 亚洲午夜性刺激影院| 在线免费一级片| 亚洲免费在线观看视频| 久久无码专区国产精品s| 中国女人久久久| 天天综合色天天综合色hd| 影音成人av| 欧美成人午夜剧场免费观看| 少妇精品视频一区二区| 91黄色免费看| 欧美三级在线免费观看| 99国产精品一区| 日本www.色| 欧美1区3d| 欧美日韩在线观看一区二区三区| 国产精品亲子伦av一区二区三区| 欧美人与性动交a欧美精品| 桃花色综合影院| 欧美日韩精品福利| 国产亚洲精品久久久久久无几年桃| 91日韩精品一区| 亚洲高清在线不卡| 夜夜精品视频| 亚洲自拍偷拍一区二区三区| 秋霞蜜臀av久久电影网免费| 国产欧美久久久久久| 国产三线在线| 色妞欧美日韩在线| 三级在线电影| 日韩一区二区三区视频| 国产精品免费精品一区| 亚洲女人小视频在线观看| 成年人在线观看av| 国产美女视频91| 亚洲少妇第一页| 最新日韩av| 99热这里只有精品7| 视频一区欧美| 国产精品乱码| 成人网av.com/| 国产精品成人久久久久| av免费不卡国产观看| 久久亚洲精品毛片| 超碰国产在线观看| 国产视频久久久| 亚洲第一色网站| 欧美美女视频在线观看| 波多野结衣视频网站| 亚洲综合在线五月| 天天色影综合网| 国产精品你懂的| 国产免费看av| 97精品电影院| 精品熟女一区二区三区| 国产乱一区二区| 久久久精品高清| 美女视频一区二区三区| 情侣黄网站免费看| 99在线精品视频在线观看| 日本免费黄色小视频| 国产精品毛片久久| 亚欧洲精品在线视频免费观看| 亚洲日产av中文字幕| 国产手机精品在线| 国产色噜噜噜91在线精品| av免费观看久久| 久久在线观看| 91在线在线观看| 亚洲天堂av资源在线观看| 亚洲一区国产精品| 97久久精品一区二区三区的观看方式| 国产精品美女呻吟| 成人一区视频| 国产精品自拍网| 欧洲美女精品免费观看视频 | 九九视频直播综合网| 高清免费电影在线观看| 久久久精品国产网站| 黄色网页在线播放| 久国内精品在线| 色呦呦呦在线观看| 欧美激情手机在线视频| 黑人极品ⅴideos精品欧美棵| 精品中文字幕视频| 欧美四级在线| 91精品国产一区| 视频在线日韩| 国产欧美精品va在线观看| 日韩美女在线| 91精品国自产在线观看| 91蜜桃臀久久一区二区| 精品在线不卡| 欧美亚洲国产激情| 爱爱爱视频网站| 欧美午夜一区二区福利视频| av在线观看地址| 欧美专区18| caoporm在线视频| 国产91对白在线观看九色| 亚洲av永久无码精品| 91蝌蚪porny九色| 中文字幕精品亚洲| 亚洲免费av在线| 五月天综合在线| 色天天综合色天天久久| 国产有码在线观看| 精品美女在线观看| 日本免费一区二区三区最新| 中文字幕一区二区三区电影| 成人影院在线看| 2018日韩中文字幕| 日本亚洲欧洲无免费码在线| 99se婷婷在线视频观看| 免费欧美激情| 成人在线免费高清视频| 翔田千里一区二区| 91视频福利网| 久久综合国产精品| 波多野结衣久久久久| 五月婷婷久久丁香| 在线观看毛片视频| 日韩黄色高清视频| 看女生喷水的网站在线观看| 午夜精品久久久久久久99黑人| 123成人网| 精品一区国产| 久久久久国产| 无码无遮挡又大又爽又黄的视频| 国产一区二区伦理片| 丰满少妇高潮一区二区| 亚洲另类色综合网站| 无码日韩精品一区二区| 欧美一区二区三区小说| 精品一二三区视频| 久久久亚洲成人| 亚洲精品一区三区三区在线观看| 国产精品播放| 国产大片一区| 一本久道综合色婷婷五月| 国产999精品久久| 性生交大片免费全黄| 色婷婷激情一区二区三区| 不卡的日韩av| 爱福利视频一区| 吞精囗交69激情欧美| 国产偷久久久精品专区| 亚洲欧美伊人| 一级 黄 色 片一| 国产精品伦理在线| 永久免费无码av网站在线观看| 精品国产一区二区国模嫣然| 秋霞成人影院| 国产精品老女人视频| 丝袜连裤袜欧美激情日韩| bt天堂新版中文在线地址| 精品一区二区三区欧美| 摸摸摸bbb毛毛毛片| 欧美性高潮床叫视频 | 伊人久久久久久久久久久| 国产在线看片免费视频在线观看| 亚洲最大激情中文字幕| 欧美成人自拍| 天天干天天综合| 国产色婷婷亚洲99精品小说| 日本天堂网在线| 亚洲国产小视频| 成人bbav| 精品国产综合久久| 一本色道久久综合| 欧产日产国产精品98| 亚洲超碰精品一区二区| 亚洲精品喷潮一区二区三区| 久久成人国产精品| 豆花视频一区| 日本福利视频在线观看| 国产精品亚洲专一区二区三区| 欧美h片在线观看| 91麻豆精品久久久久蜜臀 | 91成人国产在线观看| 欧美91在线| 成人三级视频在线播放| 国产调教视频一区| 国产又粗又猛又爽又| 夜夜嗨av色综合久久久综合网| 亚洲人免费短视频| 亚洲制服欧美久久| 久草精品在线观看| 国产精品免费人成网站酒店| 欧美一区二区三区四区在线观看 | 国产成人极品视频| 菠萝蜜一区二区| 精品综合久久久久| 亚洲精品免费电影| 囯产精品久久久久久| 欧美在线视频播放| 日韩免费看片| 三上悠亚 电影| 午夜精品久久久久| 国产专区在线播放| 成人女保姆的销魂服务| 欧美精品九九| 一区二区不卡免费视频| 欧洲av在线精品| 在线播放免费av| 乱色588欧美| 国产一区激情在线| 91国产丝袜播放在线| 亚洲精品一区二区久| 国产成人a视频高清在线观看| 国产日韩第一页| 99国产精品久久久久久久久久久| 黄色大全在线观看| 九色成人免费视频| 国产欧美一区二区三区精品观看| 国产原创精品在线| 亚洲午夜影视影院在线观看| 美丽的姑娘在线观看免费动漫| 国产精品网红直播| 影音先锋久久久| 人人妻人人澡人人爽| 欧美一级高清片| 日韩精品一区二区三区av| 亚洲一区 在线播放| 久久午夜国产精品| 精品国产伦一区二区三| 国产成人欧美在线观看| 亚洲欧美一级二级三级| 亚洲色图第四色| 欧美精品一区二区三区久久久 | 日韩在线卡一卡二| 欧美成人三级视频| 亚洲性生活视频| 韩国精品福利一区二区三区|