Spring Cloud 2.2.2 源碼之六十二nacos數據一致性原理之臨時結點數據同步二

Spring Cloud 2.2.2 源碼之六十二nacos數據一致性原理之臨時結點數據同步二

nacos數據一致性服務執行流程

在這裏插入圖片描述

DataStore的batchGet

上篇說到要進行數據同步了,我們先來看下任務key=com.alibaba.nacos.naming.iplist.ephemeral.命名空間##分組@@服務名,所以可能隊列裏會有多個這樣的服務名。儘管是有多個線程去隊列去取,但是如果同樣的key很多的話,可能一個線程會取到同樣的key多個,不過沒關係,後面獲取數據的時候只能獲取一份最新的。
在這裏插入圖片描述
在這裏插入圖片描述
這裏keys可能有相同的,但是dataMap裏只能有一份,而且是最新的,所以不用擔心。

    public Map<String, Datum> batchGet(List<String> keys) {
        Map<String, Datum> map = new HashMap<>(128);
        for (String key : keys) {
            Datum datum = dataMap.get(key);
            if (datum == null) {
                continue;
            }
            map.put(key, datum);
        }
        return map;
    }

NamingProxy的syncData數據同步

json序列化之後要進行同步啦:
在這裏插入圖片描述
uri/distro/datum,這裏先點到爲止,後面會詳細說。
在這裏插入圖片描述

DistroController的onSyncDatum

最終還是調用DistroConsistencyServiceImplonPut,進行數據保存和更新通知:
在這裏插入圖片描述
在這裏插入圖片描述
後面就是UDP通知客戶端更新了,主要流程可以看上面的圖。後面說永久結點的數據同步。

好了,今天就到這裏了,希望對學習理解有幫助,大神看見勿噴,僅爲自己的學習理解,能力有限,請多包涵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章