@Override
    public void onRuleChanged(final List<RuleData> 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.getRuleDataId() + DefaultNodeConstants.JOIN_POINT;
        this.onCommonMultiChanged(changed, eventType,
                configKeyPrefix,
                ruleData -> String.join(DefaultNodeConstants.JOIN_POINT, ruleData.getPluginName(), ruleData.getSelectorId()),
                RuleData::getId);
        LOG.debug("[DataChangedListener] RuleChanged {}", changeData.getRuleDataId());
    }
onCommonChanged.
save to configuration center common methods.
examples data:
 namespaceId.meta.list
  -> meta.id
  -> meta.id
  -> meta.id

@param configKeyPrefix configKeyPrefix
@param changedList changedList
@param eventType eventType
@param mapperToKey mapperToKey
@param tClass tClass
shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractNodeDataChangedListener.java