You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2018/11/29 09:06:03 UTC
[incubator-dubbo] 01/03: optimize dynamic configuration api
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit 14d1f97ae80a35fe65d9fced488a1fd8bac4f822
Author: ken.lj <ke...@gmail.com>
AuthorDate: Thu Nov 29 17:05:05 2018 +0800
optimize dynamic configuration api
---
.../configcenter/AbstractDynamicConfiguration.java | 7 ++++++-
.../dubbo/configcenter/DynamicConfiguration.java | 3 ++-
.../support/apollo/ApolloDynamicConfiguration.java | 18 +++++++++---------
3 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/AbstractDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/AbstractDynamicConfiguration.java
index 6fcf8c3..4190e1d 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/AbstractDynamicConfiguration.java
+++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/AbstractDynamicConfiguration.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.config.AbstractConfiguration;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* Dynamic configuration template class. The concrete implementation needs to provide implementation for three methods.
@@ -34,6 +35,7 @@ public abstract class AbstractDynamicConfiguration<TargetListener> extends Abstr
protected static final String DEFAULT_GROUP = "dubbo";
protected URL url;
+ private AtomicBoolean inited = new AtomicBoolean(false);
// One key can register multiple target listeners, but one target listener only maps to one configuration listener
protected ConcurrentMap<String, TargetListener> targetListeners =
@@ -44,6 +46,9 @@ public abstract class AbstractDynamicConfiguration<TargetListener> extends Abstr
@Override
public void initWith(URL url) {
+ if (!inited.compareAndSet(false, true)) {
+ return;
+ }
this.url = url;
}
@@ -86,7 +91,7 @@ public abstract class AbstractDynamicConfiguration<TargetListener> extends Abstr
}
@Override
- public void removeListener(String key) {
+ public void removeListener(String key, ConfigurationListener listener) {
}
diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfiguration.java
index 83ff936..7e37918 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfiguration.java
+++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/DynamicConfiguration.java
@@ -35,13 +35,14 @@ public interface DynamicConfiguration extends Configuration {
/**
* Register a configuration listener for a specified key
+ * The listener only works for service governance purpose, so the group would always be 'dubbo'
*
* @param key the key to represent a configuration
* @param listener configuration listener
*/
void addListener(String key, ConfigurationListener listener);
- void removeListener(String key);
+ void removeListener(String key, ConfigurationListener listener);
/**
* Get the configuration mapped to the given key
diff --git a/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
index 0c0d95c..6e3b77e 100644
--- a/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
+++ b/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java
@@ -16,12 +16,6 @@
*/
package org.apache.dubbo.configcenter.support.apollo;
-import com.ctrip.framework.apollo.Config;
-import com.ctrip.framework.apollo.ConfigChangeListener;
-import com.ctrip.framework.apollo.ConfigService;
-import com.ctrip.framework.apollo.enums.ConfigSourceType;
-import com.ctrip.framework.apollo.enums.PropertyChangeType;
-import com.ctrip.framework.apollo.model.ConfigChange;
import org.apache.dubbo.common.Constants;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.logger.Logger;
@@ -32,6 +26,13 @@ import org.apache.dubbo.configcenter.ConfigChangeEvent;
import org.apache.dubbo.configcenter.ConfigChangeType;
import org.apache.dubbo.configcenter.ConfigurationListener;
+import com.ctrip.framework.apollo.Config;
+import com.ctrip.framework.apollo.ConfigChangeListener;
+import com.ctrip.framework.apollo.ConfigService;
+import com.ctrip.framework.apollo.enums.ConfigSourceType;
+import com.ctrip.framework.apollo.enums.PropertyChangeType;
+import com.ctrip.framework.apollo.model.ConfigChange;
+
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
@@ -113,13 +114,12 @@ public class ApolloDynamicConfiguration extends AbstractDynamicConfiguration<Apo
@Override
protected void addConfigurationListener(String key, ApolloListener listener, ConfigurationListener configurationListener) {
listener.addListener(configurationListener);
+ this.dubboConfig.addChangeListener(listener);
}
@Override
protected ApolloListener createTargetListener(String key) {
- ApolloListener listener = new ApolloListener();
- this.dubboConfig.addChangeListener(listener);
- return listener;
+ return new ApolloListener();
}
@Override