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
通知客户端更新了,主要流程可以看上面的图。后面说永久结点的数据同步。
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。