序
本文主要研究一下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<Configurator> 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<Configurator> getConfigurators() { return configurators; } public void setConfigurators(List<Configurator> configurators) { this.configurators = configurators; } }
- AbstractConfiguratorListener声明实现了ConfigurationListener接口,其process在event的changeType是ConfigChangeType.DELETED时会清空configurators;最后执行的notifyOverrides方法留给子类实现
小结
ConfigChangeEvent定义了key、value、changeType三个属性;ConfigChangeType定义了ADDED、MODIFIED、DELETED三种类型;ConfigurationListener定义了process方法来处理ConfigChangeEvent
doc
- ConfigChangeEvent
原文
https://segmentfault.com/a/1190000020220099
本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 聊聊dubbo的ConfigChangeEvent