@Override
    public void onDiscoveryUpstreamChanged(final List<DiscoverySyncData> changed, final DataEventTypeEnum eventType) {
        if (CollectionUtils.isEmpty(changed)) {
            return;
        }
        final String namespaceId = changed.stream().map(value -> StringUtils.defaultString(value.getNamespaceId(), SYS_DEFAULT_NAMESPACE_ID)).findFirst().get();
        final String configKeyPrefix = namespaceId + DefaultNodeConstants.JOIN_POINT + changeData.getDiscoveryDataId() + DefaultNodeConstants.JOIN_POINT;
        this.onCommonMultiChanged(changed, eventType, configKeyPrefix, DiscoverySyncData::getPluginName, DiscoverySyncData::getSelectorId);
        LOG.debug("[DataChangedListener] DiscoveryUpstreamChanged {}", changeData.getDiscoveryDataId());
    }
onCommonMultiChanged.
save to configuration center common multi methods.
examples data:
 namespaceId.selector.key1
  -> selector.key1.value1
  -> selector.key1.value2
  -> selector.key1.value3
 namespaceId.selector.key2
  -> selector.key2.value4
  -> selector.key2.value5
  -> selector.key2.value6
@param changedList changedList
@param eventType eventType
@param configKeyPrefix configKeyPrefix
@param mappingKey mappingKey
@param mappingValue mappingValue
shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractNodeDataChangedListener.java