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
最終還是調用DistroConsistencyServiceImpl
的onPut
,進行數據保存和更新通知:
後面就是UDP
通知客戶端更新了,主要流程可以看上面的圖。後面說永久結點的數據同步。
好了,今天就到這裏了,希望對學習理解有幫助,大神看見勿噴,僅爲自己的學習理解,能力有限,請多包涵。