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/21 09:43:16 UTC
[incubator-dubbo] branch dev-metadata updated: Merge pull request
#2810, code review and refactor for dubbo-configcenter.
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
The following commit(s) were added to refs/heads/dev-metadata by this push:
new 6a1b9ee Merge pull request #2810, code review and refactor for dubbo-configcenter.
6a1b9ee is described below
commit 6a1b9ee657ad01f6786d609bf55f7fd7aecc2441
Author: Ian Luo <ia...@gmail.com>
AuthorDate: Wed Nov 21 17:43:11 2018 +0800
Merge pull request #2810, code review and refactor for dubbo-configcenter.
---
.../org/apache/dubbo/rpc/cluster/RouterChain.java | 2 +-
.../apache/dubbo/common/config/Configuration.java | 11 +++-
.../dubbo/common/extension/ExtensionLoader.java | 12 ++--
.../dubbo/config/AbstractInterfaceConfig.java | 2 +-
.../apache/dubbo/config/ConfigCenterConfig.java | 15 ++---
dubbo-configcenter/dubbo-configcenter-api/pom.xml | 4 +-
.../configcenter/AbstractDynamicConfiguration.java | 72 +++++++++++++++-------
.../dubbo/configcenter/ConfigChangeEvent.java | 2 +
.../dubbo/configcenter/ConfigChangeType.java | 13 +++-
.../org/apache/dubbo/configcenter/ConfigType.java | 9 ++-
.../dubbo/configcenter/ConfigurationListener.java | 9 ++-
.../dubbo/configcenter/ConfigurationUtils.java | 13 ++--
.../dubbo/configcenter/ConfigurationWrapper.java | 3 +-
.../dubbo/configcenter/DynamicConfiguration.java | 61 +++++++++++++++---
.../support/nop/NopDynamicConfiguration.java | 15 ++---
.../support/apollo/ApolloDynamicConfiguration.java | 7 ++-
.../archaius/ArchaiusDynamicConfiguration.java | 8 ++-
.../dubbo/container/log4j/Log4jContainer.java | 1 +
.../registry/integration/RegistryProtocol.java | 7 +--
19 files changed, 183 insertions(+), 83 deletions(-)
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java
index 32457e9..7b13b9e 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java
@@ -51,7 +51,7 @@ public class RouterChain<T> {
public static <T> RouterChain<T> buildChain(DynamicConfiguration dynamicConfiguration, URL url) {
RouterChain<T> routerChain = new RouterChain<>(url);
- List<RouterFactory> extensionFactories = ExtensionLoader.getExtensionLoader(RouterFactory.class).getActivateExtension(dynamicConfiguration.getUrl(), (String[]) null);
+ List<RouterFactory> extensionFactories = ExtensionLoader.getExtensionLoader(RouterFactory.class).getActivateExtension(url, (String[]) null);
List<Router> routers = extensionFactories.stream()
.map(factory -> {
Router router = factory.getRouter(dynamicConfiguration, url);
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
index 2d76882..8380b59 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java
@@ -17,7 +17,7 @@
package org.apache.dubbo.common.config;
/**
- *
+ * Configuration interface, to fetch the value for the specified key.
*/
public interface Configuration {
/**
@@ -58,6 +58,15 @@ public interface Configuration {
*/
Object getProperty(String key);
+ /**
+ * Gets a property from the configuration. The default value will return if the configuration doesn't contain
+ * the mapping for the specified key.
+ *
+ * @param key property to retrieve
+ * @param defaultValue default value
+ * @return the value to which this configuration maps the specified key, or default value if the configuration
+ * contains no mapping for this key.
+ */
Object getProperty(String key, Object defaultValue);
/**
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
index 1e9c538..83a6c7f 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
@@ -302,10 +302,6 @@ public class ExtensionLoader<T> {
return Collections.unmodifiableSet(new TreeSet<String>(cachedInstances.keySet()));
}
- public Set<Object> getLoadedExtensionInstances() {
- return Collections.unmodifiableSet(cachedInstances.values().stream().map(Holder::get).collect(Collectors.toSet()));
- }
-
public Object getLoadedAdaptiveExtensionInstances() {
return cachedAdaptiveInstance.get();
}
@@ -341,6 +337,14 @@ public class ExtensionLoader<T> {
}
/**
+ * Return all available extension instances.
+ */
+ public Set<T> getExtensions() {
+ return Collections.unmodifiableSet(getSupportedExtensions().stream().map(this::getExtension)
+ .collect(Collectors.toSet()));
+ }
+
+ /**
* Return default extension, return <code>null</code> if it's not configured.
*/
public T getDefaultExtension() {
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
index e8649f0..b1f7223 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java
@@ -157,7 +157,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig {
// For compatibility purpose, use registry as the default config center if the registry protocol is zookeeper and there's no config center specified explicitly.
RegistryConfig registry = registries.get(0);
if (registry.isZookeeperProtocol()) {
- Set<Object> loadedConfigurations = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getLoadedExtensionInstances();
+ Set<DynamicConfiguration> loadedConfigurations = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getExtensions();
// we use the loading status of DynamicConfiguration to decide whether ConfigCenter has been initiated.
if (CollectionUtils.isEmpty(loadedConfigurations)) {
ConfigCenterConfig configCenterConfig = new ConfigCenterConfig();
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
index c957f1a..0b884cc 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
@@ -20,7 +20,6 @@ import org.apache.dubbo.common.Constants;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.config.Environment;
import org.apache.dubbo.common.extension.ExtensionLoader;
-import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.common.utils.UrlUtils;
import org.apache.dubbo.config.support.Parameter;
@@ -31,7 +30,6 @@ import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
-import java.util.Set;
/**
*
@@ -102,16 +100,11 @@ public class ConfigCenterConfig extends AbstractConfig {
// checkConfigCenter();
URL url = toConfigUrl();
- Set<Object> loadedConfigurations = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getLoadedExtensionInstances();
- if (CollectionUtils.isEmpty(loadedConfigurations)) {
- DynamicConfiguration dynamicConfiguration = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getExtension(url.getProtocol());
- // TODO, maybe we need a factory to do this?
- dynamicConfiguration.setUrl(url);
- dynamicConfiguration.init();
- return dynamicConfiguration;
- }
- return (DynamicConfiguration) loadedConfigurations.iterator().next();
+ DynamicConfiguration dynamicConfiguration = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getExtension(url.getProtocol());
+ // TODO, maybe we need a factory to do this?
+ dynamicConfiguration.initWith(url);
+ return dynamicConfiguration;
}
private URL toConfigUrl() {
diff --git a/dubbo-configcenter/dubbo-configcenter-api/pom.xml b/dubbo-configcenter/dubbo-configcenter-api/pom.xml
index e75fb9e..68b51ff 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/pom.xml
+++ b/dubbo-configcenter/dubbo-configcenter-api/pom.xml
@@ -25,7 +25,7 @@
<artifactId>dubbo-configcenter-api</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
- <description>The api definition of the service configcenter module</description>
+ <description>The api definition of the service config-center module</description>
<properties>
<skip_maven_deploy>false</skip_maven_deploy>
</properties>
@@ -37,4 +37,4 @@
<version>${project.parent.version}</version>
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
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 3411032..258ce52 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
@@ -23,23 +23,36 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
+ * Dynamic configuration template class. The concrete implementation needs to provide implementation for three methods.
*
+ * @see AbstractDynamicConfiguration#getTargetConfig(String, String, long)
+ * @see AbstractDynamicConfiguration#addListener(String, ConfigurationListener)
+ * @see AbstractDynamicConfiguration#createTargetListener(String, ConfigurationListener)
*/
-public abstract class AbstractDynamicConfiguration<TargetConfigListener> extends AbstractConfiguration implements DynamicConfiguration {
- public static final String DEFAULT_GROUP = "dubbo";
+public abstract class AbstractDynamicConfiguration<TargetListener> extends AbstractConfiguration
+ implements DynamicConfiguration {
+ protected static final String DEFAULT_GROUP = "dubbo";
+
protected URL url;
- /**
- * One key can register multiple target listeners, but one target listener only maps to one configuration listener
- */
- private ConcurrentMap<String, ConcurrentMap<ConfigurationListener, TargetConfigListener>> listenerToTargetListenerMap = new ConcurrentHashMap<>();
+
+ // One key can register multiple target listeners, but one target listener only maps to one configuration listener
+ private ConcurrentMap<String, ConcurrentMap<ConfigurationListener, TargetListener>> targetListeners =
+ new ConcurrentHashMap<>();
public AbstractDynamicConfiguration() {
}
@Override
+ public void initWith(URL url) {
+ this.url = url;
+ }
+
+ @Override
public void addListener(String key, ConfigurationListener listener) {
- ConcurrentMap<ConfigurationListener, TargetConfigListener> listeners = listenerToTargetListenerMap.computeIfAbsent(key, k -> new ConcurrentHashMap<>());
- TargetConfigListener targetListener = listeners.computeIfAbsent(listener, k -> createTargetConfigListener(key, listener));
+ ConcurrentMap<ConfigurationListener, TargetListener> listeners = targetListeners.computeIfAbsent(key,
+ k -> new ConcurrentHashMap<>());
+ TargetListener targetListener = listeners.computeIfAbsent(listener,
+ k -> createTargetListener(key, listener));
addTargetListener(key, targetListener);
}
@@ -60,33 +73,48 @@ public abstract class AbstractDynamicConfiguration<TargetConfigListener> extends
@Override
public String getConfig(String key, String group, ConfigurationListener listener) {
- return getConfig(key, group, 0l, listener);
+ return getConfig(key, group, listener, 0L);
}
@Override
- public String getConfig(String key, String group, long timeout, ConfigurationListener listener) {
+ public String getConfig(String key, String group, ConfigurationListener listener, long timeout) {
try {
if (listener != null) {
this.addListener(key, listener);
}
- return getInternalProperty(key, group, timeout);
+ return getTargetConfig(key, group, timeout);
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
- public URL getUrl() {
- return url;
- }
-
- public void setUrl(URL url) {
- this.url = url;
- }
-
- protected abstract String getInternalProperty(String key, String group, long timeout);
+ /**
+ * Fetch dynamic configuration from backend config storage. If timeout exceeds, exception should be thrown.
+ *
+ * @param key property key
+ * @param group group
+ * @param timeout timeout
+ * @return target config value
+ */
+ protected abstract String getTargetConfig(String key, String group, long timeout);
- protected abstract void addTargetListener(String key, TargetConfigListener listener);
+ /**
+ * Register a native listener to the backend config storage so that Dubbo has chance to get notified when the
+ * value changes.
+ *
+ * @param key property key listener is interested.
+ * @param listener native listener for the backend config storage
+ */
+ protected abstract void addTargetListener(String key, TargetListener listener);
- protected abstract TargetConfigListener createTargetConfigListener(String key, ConfigurationListener listener);
+ /**
+ * Create a native listener for the backend config storage, eventually ConfigurationListener will get notified once
+ * the value changes.
+ *
+ * @param key property key the native listener will listen on
+ * @param listener ConfigurationListener instance
+ * @return native listener for the backend config storage
+ */
+ protected abstract TargetListener createTargetListener(String key, ConfigurationListener listener);
}
diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeEvent.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeEvent.java
index d99d400..403ec75 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeEvent.java
+++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeEvent.java
@@ -17,7 +17,9 @@
package org.apache.dubbo.configcenter;
/**
+ * Config change event.
*
+ * @see ConfigChangeType
*/
public class ConfigChangeEvent {
private String key;
diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeType.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeType.java
index 00f56f3..e810ddc 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeType.java
+++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigChangeType.java
@@ -17,10 +17,21 @@
package org.apache.dubbo.configcenter;
/**
- *
+ * Config change event type
*/
public enum ConfigChangeType {
+ /**
+ * A config is created.
+ */
ADDED,
+
+ /**
+ * A config is updated.
+ */
MODIFIED,
+
+ /**
+ * A config is deleted.
+ */
DELETED
}
diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigType.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigType.java
index e5ec836..d38e39d 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigType.java
+++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigType.java
@@ -17,9 +17,16 @@
package org.apache.dubbo.configcenter;
/**
- *
+ * Config type
*/
public enum ConfigType {
+ /**
+ * For Dubbo dynamic config other than routing rules.
+ */
CONFIGURATORS,
+
+ /**
+ * For Dubbo routing rules
+ */
ROUTERS
}
diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationListener.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationListener.java
index 50b2f42..bacaa14 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationListener.java
+++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationListener.java
@@ -19,11 +19,18 @@ package org.apache.dubbo.configcenter;
import org.apache.dubbo.common.URL;
/**
- *
+ * Config listener, will get notified when the config it listens on changes.
*/
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);
+ // FIXME: why we need this?
URL getUrl();
}
diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationUtils.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationUtils.java
index cf57b67..ef3e6d6 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationUtils.java
+++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationUtils.java
@@ -28,7 +28,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
- *
+ * Utilities for manipulating configurations from different sources
*/
public class ConfigurationUtils {
private static final CompositeConfiguration compositeConfiguration;
@@ -64,17 +64,16 @@ public class ConfigurationUtils {
}
/**
- * If user opens DynamicConfig, the extension instance must has been created during the initialization of ConfigCenterConfig with the right extension type user specified.
- * If no DynamicConfig presents, NopDynamicConfiguration will be used.
- *
- * @return
+ * If user opens DynamicConfig, the extension instance must has been created during the initialization of
+ * ConfigCenterConfig with the right extension type user specified. If no DynamicConfig presents,
+ * NopDynamicConfiguration will be used.
*/
public static DynamicConfiguration getDynamicConfiguration() {
- Set<Object> configurations = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getLoadedExtensionInstances();
+ Set<DynamicConfiguration> configurations = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getExtensions();
if (CollectionUtils.isEmpty(configurations)) {
return ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getDefaultExtension();
} else {
- return (DynamicConfiguration) configurations.iterator().next();
+ return configurations.iterator().next();
}
}
diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationWrapper.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationWrapper.java
index 9a22ddd..f60d560 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationWrapper.java
+++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/ConfigurationWrapper.java
@@ -20,7 +20,7 @@ import org.apache.dubbo.common.config.AbstractConfiguration;
import org.apache.dubbo.common.config.Configuration;
/**
- *
+ * A wrapper to fetch a config for the specific key with the different prefix in the specified order.
*/
public class ConfigurationWrapper extends AbstractConfiguration {
private String application;
@@ -36,6 +36,7 @@ public class ConfigurationWrapper extends AbstractConfiguration {
this.delegate = configuration;
}
+ // FIXME: I think the order is wrong, service.method.key go first, then service.key, and then application.key
@Override
protected Object getInternalProperty(String key) {
Object value = delegate.getProperty(application + "." + key);
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 7adcc47..83faee6 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
@@ -21,27 +21,72 @@ import org.apache.dubbo.common.config.Configuration;
import org.apache.dubbo.common.extension.SPI;
/**
- *
+ * Dynamic configuration
*/
@SPI("nop")
public interface DynamicConfiguration extends Configuration {
- void init();
-
- URL getUrl();
-
- void setUrl(URL url);
+ /**
+ * Init dynamic configuration from URL
+ *
+ * @param url the url in which info for initializing dynamic configuration is contained.
+ */
+ void initWith(URL url);
+ /**
+ * Register a configuration listener for a specified key
+ *
+ * @param key the key to represent a configuration
+ * @param listener configuration listener
+ */
void addListener(String key, ConfigurationListener listener);
+ /**
+ * Get the configuration mapped to the given key
+ *
+ * @param key property key
+ * @return target configuration mapped to the given key
+ */
String getConfig(String key);
+ /**
+ * Get the configuration mapped to the given key and the given group
+ *
+ * @param key property key
+ * @param group group
+ * @return target configuration mapped to the given key and the given group
+ */
String getConfig(String key, String group);
+ /**
+ * Get the configuration mapped to the given key, and notify the passed-in listener
+ *
+ * @param key property key
+ * @param listener configuration listener
+ * @return
+ */
String getConfig(String key, ConfigurationListener listener);
- String getConfig(String key, String group, long timeout, ConfigurationListener listener);
-
+ /**
+ * Get the configuration mapped to the given key and the given group, and notify the passed-in listener
+ *
+ * @param key property key
+ * @param group group
+ * @param listener configuration listener
+ * @return target configuration mapped to the given key and the given group
+ */
String getConfig(String key, String group, ConfigurationListener listener);
+ /**
+ * Get the configuration mapped to the given key and the given group, and notify the passed-in listener. If the
+ * configuration fails to fetch after timeout exceeds, IllegalStateException will be thrown.
+ *
+ * @param key property key
+ * @param group group
+ * @param listener configuration listener
+ * @param timeout timeout value for fetching the target config
+ * @return target configuration mapped to the given key and the given group, IllegalStateException will be thrown
+ * if timeout exceeds.
+ */
+ String getConfig(String key, String group, ConfigurationListener listener, long timeout);
}
diff --git a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/support/nop/NopDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/support/nop/NopDynamicConfiguration.java
index f506935..1dc0794 100644
--- a/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/support/nop/NopDynamicConfiguration.java
+++ b/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/dubbo/configcenter/support/nop/NopDynamicConfiguration.java
@@ -21,28 +21,23 @@ import org.apache.dubbo.configcenter.ConfigurationListener;
import org.apache.dubbo.configcenter.DynamicConfiguration;
/**
- * The default extension of {@link DynamicConfiguration}.
- * If user does not specify a config centre, or specifies one that is not a valid extension, it will default to this one.
+ * The default extension of {@link DynamicConfiguration}. If user does not specify a config centre, or specifies one
+ * that is not a valid extension, it will default to this one.
*/
public class NopDynamicConfiguration extends AbstractDynamicConfiguration {
@Override
- public void init() {
-
- }
-
- @Override
- protected String getInternalProperty(String key, String group, long timeout) {
+ protected String getTargetConfig(String key, String group, long timeout) {
return null;
}
@Override
protected void addTargetListener(String key, Object o) {
-
+ // no-op
}
@Override
- protected Object createTargetConfigListener(String key, ConfigurationListener listener) {
+ protected Object createTargetListener(String key, ConfigurationListener listener) {
return null;
}
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 f3f392d..efec2fb 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
@@ -52,7 +52,8 @@ public class ApolloDynamicConfiguration extends AbstractDynamicConfiguration<Con
}
@Override
- public void init() {
+ public void initWith(URL url) {
+ super.initWith(url);
/**
* Instead of using Dubbo's configuration, I would suggest use the original configuration method Apollo provides.
*/
@@ -94,7 +95,7 @@ public class ApolloDynamicConfiguration extends AbstractDynamicConfiguration<Con
* @return
*/
@Override
- protected String getInternalProperty(String key, String group, long timeout) {
+ protected String getTargetConfig(String key, String group, long timeout) {
if (StringUtils.isNotEmpty(group) && !url.getParameter(Constants.CONFIG_GROUP_KEY, DEFAULT_GROUP).equals(group)) {
Config config = ConfigService.getConfig(group);
if (config != null) {
@@ -126,7 +127,7 @@ public class ApolloDynamicConfiguration extends AbstractDynamicConfiguration<Con
}
@Override
- protected ConfigChangeListener createTargetConfigListener(String key, ConfigurationListener listener) {
+ protected ConfigChangeListener createTargetListener(String key, ConfigurationListener listener) {
return new ApolloListener(listener);
}
diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/archaius/ArchaiusDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/archaius/ArchaiusDynamicConfiguration.java
index 014958d..9ca06ec 100644
--- a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/archaius/ArchaiusDynamicConfiguration.java
+++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/archaius/ArchaiusDynamicConfiguration.java
@@ -42,7 +42,9 @@ public class ArchaiusDynamicConfiguration extends AbstractDynamicConfiguration<R
}
@Override
- public void init() {
+ public void initWith(URL url) {
+ super.initWith(url);
+
// String address = env.getCompositeConf().getString(ADDRESS_KEY);
// String app = env.getCompositeConf().getString(APP_KEY);
@@ -80,7 +82,7 @@ public class ArchaiusDynamicConfiguration extends AbstractDynamicConfiguration<R
* @return
*/
@Override
- protected String getInternalProperty(String key, String group, long timeout) {
+ protected String getTargetConfig(String key, String group, long timeout) {
if (StringUtils.isNotEmpty(group)) {
key = group + "." + key;
}
@@ -112,7 +114,7 @@ public class ArchaiusDynamicConfiguration extends AbstractDynamicConfiguration<R
}
@Override
- protected Runnable createTargetConfigListener(String key, ConfigurationListener listener) {
+ protected Runnable createTargetListener(String key, ConfigurationListener listener) {
return new ArchaiusListener(key, listener);
}
diff --git a/dubbo-container/dubbo-container-log4j/src/main/java/org/apache/dubbo/container/log4j/Log4jContainer.java b/dubbo-container/dubbo-container-log4j/src/main/java/org/apache/dubbo/container/log4j/Log4jContainer.java
index 1d24236..78304bb 100644
--- a/dubbo-container/dubbo-container-log4j/src/main/java/org/apache/dubbo/container/log4j/Log4jContainer.java
+++ b/dubbo-container/dubbo-container-log4j/src/main/java/org/apache/dubbo/container/log4j/Log4jContainer.java
@@ -18,6 +18,7 @@ package org.apache.dubbo.container.log4j;
import org.apache.dubbo.configcenter.ConfigurationUtils;
import org.apache.dubbo.container.Container;
+
import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.LogManager;
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
index 9ad920c..ca6dc2c 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java
@@ -87,12 +87,7 @@ public class RegistryProtocol implements Protocol {
public RegistryProtocol() {
INSTANCE = this;
- Set<Object> configurations = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getLoadedExtensionInstances();
- if (CollectionUtils.isEmpty(configurations)) {
- dynamicConfiguration = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getDefaultExtension();
- } else {
- dynamicConfiguration = (DynamicConfiguration) configurations.iterator().next();
- }
+ dynamicConfiguration = ConfigurationUtils.getDynamicConfiguration();
}
public static RegistryProtocol getRegistryProtocol() {