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