千家信息网

dubbo中ConfigChangeEvent的作用是什么

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,本篇文章为大家展示了dubbo中ConfigChangeEvent的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。ConfigChangeEvent
千家信息网最后更新 2025年12月01日dubbo中ConfigChangeEvent的作用是什么

本篇文章为大家展示了dubbo中ConfigChangeEvent的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

ConfigChangeEvent

dubbo-2.7.3/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeEvent.java

public class ConfigChangeEvent {    private final String key;    private final String value;    private final ConfigChangeType changeType;    public ConfigChangeEvent(String key, String value) {        this(key, value, ConfigChangeType.MODIFIED);    }    public ConfigChangeEvent(String key, String value, ConfigChangeType changeType) {        this.key = key;        this.value = value;        this.changeType = changeType;    }    public String getKey() {        return key;    }    public String getValue() {        return value;    }    public ConfigChangeType getChangeType() {        return changeType;    }    @Override    public String toString() {        return "ConfigChangeEvent{" +                "key='" + key + '\'' +                ", value='" + value + '\'' +                ", changeType=" + changeType +                '}';    }}
  • ConfigChangeEvent定义了key、value、changeType三个属性

ConfigChangeType

dubbo-2.7.3/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeType.java

public enum ConfigChangeType {    /**     * A config is created.     */    ADDED,    /**     * A config is updated.     */    MODIFIED,    /**     * A config is deleted.     */    DELETED}
  • ConfigChangeType定义了ADDED、MODIFIED、DELETED三种类型

ConfigurationListener

dubbo-2.7.3/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationListener.java

public interface ConfigurationListener {    /**     * Listener call back method. Listener gets notified by this method once there's any change happens on the config     * the listener listens on.     *     * @param event config change event     */    void process(ConfigChangeEvent event);}
  • ConfigurationListener定义了process方法来处理ConfigChangeEvent

AbstractConfiguratorListener

dubbo-2.7.3/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/AbstractConfiguratorListener.java

public abstract class AbstractConfiguratorListener implements ConfigurationListener {    private static final Logger logger = LoggerFactory.getLogger(AbstractConfiguratorListener.class);    protected List configurators = Collections.emptyList();    protected final void initWith(String key) {        DynamicConfiguration dynamicConfiguration = DynamicConfiguration.getDynamicConfiguration();        dynamicConfiguration.addListener(key, this);        String rawConfig = dynamicConfiguration.getRule(key, DynamicConfiguration.DEFAULT_GROUP);        if (!StringUtils.isEmpty(rawConfig)) {            genConfiguratorsFromRawRule(rawConfig);        }    }    @Override    public void process(ConfigChangeEvent event) {        if (logger.isInfoEnabled()) {            logger.info("Notification of overriding rule, change type is: " + event.getChangeType() +                    ", raw config content is:\n " + event.getValue());        }        if (event.getChangeType().equals(ConfigChangeType.DELETED)) {            configurators.clear();        } else {            if (!genConfiguratorsFromRawRule(event.getValue())) {                return;            }        }        notifyOverrides();    }    private boolean genConfiguratorsFromRawRule(String rawConfig) {        boolean parseSuccess = true;        try {            // parseConfigurators will recognize app/service config automatically.            configurators = Configurator.toConfigurators(ConfigParser.parseConfigurators(rawConfig))                    .orElse(configurators);        } catch (Exception e) {            logger.error("Failed to parse raw dynamic config and it will not take effect, the raw config is: " +                    rawConfig, e);            parseSuccess = false;        }        return parseSuccess;    }    protected abstract void notifyOverrides();    public List getConfigurators() {        return configurators;    }    public void setConfigurators(List configurators) {        this.configurators = configurators;    }}
  • AbstractConfiguratorListener声明实现了ConfigurationListener接口,其process在event的changeType是ConfigChangeType.DELETED时会清空configurators;最后执行的notifyOverrides方法留给子类实现

小结

ConfigChangeEvent定义了key、value、changeType三个属性;ConfigChangeType定义了ADDED、MODIFIED、DELETED三种类型;ConfigurationListener定义了process方法来处理ConfigChangeEvent

上述内容就是dubbo中ConfigChangeEvent的作用是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

0