in mode/cluster/repository/nacos/src/main/java/org/apache/shardingsphere/mode/repository/cluster/nacos/listener/NamingEventListener.java [47:73]
public void onEvent(final Event event) {
if (!(event instanceof NamingEvent)) {
return;
}
NamingEvent namingEvent = (NamingEvent) event;
Collection<Instance> instances = namingEvent.getInstances().stream().sorted(Comparator.comparing(NacosMetaDataUtils::getKey)).collect(Collectors.toList());
Collection<WatchData> watchDataList = new LinkedList<>();
synchronized (this) {
instances.forEach(instance -> prefixListenerMap.forEach((prefixPath, listener) -> {
String key = NacosMetaDataUtils.getKey(instance);
if (key.startsWith(prefixPath)) {
Instance preInstance = preInstances.remove(key);
WatchData watchData = new WatchData(key, preInstance, instance, listener);
watchDataList.add(watchData);
}
}));
preInstances.values().stream().sorted(Comparator.comparing(NacosMetaDataUtils::getKey).reversed()).forEach(instance -> prefixListenerMap.forEach((prefixPath, listener) -> {
String key = NacosMetaDataUtils.getKey(instance);
if (key.startsWith(prefixPath)) {
WatchData watchData = new WatchData(key, instance, null, listener);
watchDataList.add(watchData);
}
}));
watchDataList.forEach(this::watch);
setPreInstances(instances);
}
}