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 2019/07/27 07:50:50 UTC
[dubbo] 03/04: Merge remote-tracking branch 'origin/cloud-native'
into cloud-native
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch cloud-native
in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 56c931eae3360f6f68adb7295279ed00fce2a7f6
Merge: 19c5bab 758b49f
Author: ken.lj <ke...@gmail.com>
AuthorDate: Sat Jul 27 15:17:58 2019 +0800
Merge remote-tracking branch 'origin/cloud-native' into cloud-native
# Conflicts:
# dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
# dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java
# dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java
# dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
dubbo-bootstrap/pom.xml | 40 +-
.../dubbo/bootstrap/ApplicationSettings.java | 127 -----
.../org/apache/dubbo/bootstrap/DubboBootstrap.java | 399 +++++++------
.../apache/dubbo/bootstrap/ProtocolSettings.java | 215 -------
.../apache/dubbo/bootstrap/ReferenceSettings.java | 334 -----------
.../apache/dubbo/bootstrap/RegistrySettings.java | 164 ------
.../apache/dubbo/bootstrap/ServiceSettings.java | 384 -------------
.../apache/dubbo/bootstrap/DubboBootstrapTest.java | 14 -
.../bootstrap/DubboServiceConsumerBootstrap.java | 36 +-
.../bootstrap/DubboServiceProviderBootstrap.java | 25 +-
dubbo-common/pom.xml | 4 +
.../config/configcenter/ConfigChangeEvent.java | 6 +-
.../config/configcenter/ConfigurationListener.java | 4 +-
.../config/configcenter/DynamicConfiguration.java | 104 +++-
.../configcenter/DynamicConfigurationFactory.java | 20 +-
.../file/FileSystemDynamicConfiguration.java | 628 +++++++++++++++++++++
.../FileSystemDynamicConfigurationFactory.java | 21 +-
.../configcenter/nop/NopDynamicConfiguration.java | 1 +
.../nop/NopDynamicConfigurationFactory.java | 1 +
.../wrapper/CompositeDynamicConfiguration.java | 3 -
.../apache/dubbo/common/utils/ReflectUtils.java | 30 +-
...config.configcenter.DynamicConfigurationFactory | 3 +-
.../DynamicConfigurationFactoryTest.java | 25 +-
.../file/FileSystemDynamicConfigurationTest.java | 169 ++++++
dubbo-common/src/test/resources/log4j.xml | 4 +-
.../dubbo/config/AbstractInterfaceConfig.java | 23 +-
.../org/apache/dubbo/config/RegistryConfig.java | 18 +-
.../org/apache/dubbo/config/ServiceConfig.java | 17 +-
.../dubbo/config/builders/AbstractBuilder.java | 2 +-
.../apache/dubbo/config/context/ConfigManager.java | 433 +++++++-------
.../metadata/ServiceInstancePortCustomizer.java | 1 -
.../dubbo/config/context/ConfigManagerTest.java | 71 +++
.../ConfigurableMetadataServiceExporterTest.java | 4 +-
.../resources/META-INF/spring/dubbo-provider.xml | 16 +-
.../support/nacos/NacosDynamicConfiguration.java | 27 +-
dubbo-dependencies-bom/pom.xml | 11 +-
.../client/FileSystemServiceDiscovery.java | 114 ++++
.../dubbo/registry/etcd/EtcdServiceDiscovery.java | 138 ++++-
.../registry/etcd/EtcdServiceDiscoveryFactory.java | 2 +-
...e.dubbo.registry.client.ServiceDiscoveryFactory | 1 +
.../zookeeper/ZookeeperServiceDiscovery.java | 2 +-
.../org/apache/dubbo/remoting/etcd/EtcdClient.java | 8 +
.../dubbo/remoting/etcd/jetcd/JEtcdClient.java | 5 +
.../remoting/etcd/jetcd/JEtcdClientWrapper.java | 20 +
44 files changed, 1902 insertions(+), 1772 deletions(-)
diff --cc dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
index 5d69982,6a2237f..b558740
--- a/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
+++ b/dubbo-bootstrap/src/main/java/org/apache/dubbo/bootstrap/DubboBootstrap.java
@@@ -71,11 -68,14 +68,16 @@@ import java.util.concurrent.locks.Reent
import java.util.function.Consumer;
import java.util.stream.Collectors;
+ import static java.util.Arrays.asList;
import static java.util.concurrent.Executors.newSingleThreadExecutor;
import static org.apache.dubbo.common.config.ConfigurationUtils.parseProperties;
+ import static org.apache.dubbo.common.config.configcenter.DynamicConfiguration.getDynamicConfiguration;
import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
+ import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;
+ import static org.apache.dubbo.config.context.ConfigManager.getInstance;
import static org.apache.dubbo.registry.support.AbstractRegistryFactory.getRegistries;
+import static org.apache.dubbo.remoting.Constants.CLIENT_KEY;
++import static org.apache.dubbo.remoting.Constants.CLIENT_KEY;
/**
* The bootstrap class of Dubbo
@@@ -326,27 -408,26 +410,29 @@@ public class DubboBootstrap
* there's no config center specified explicitly.
*/
private void useRegistryAsConfigCenterIfNecessary() {
- ConfigManager configManager = ConfigManager.getInstance();
- configManager.getDefaultRegistries().ifPresent(registryConfigs -> {
- for (RegistryConfig registryConfig : registryConfigs) {
- // we use the loading status of DynamicConfiguration to decide whether ConfigCenter has been initiated.
- Environment.getInstance().getDynamicConfiguration().orElseGet(() -> {
- Set<ConfigCenterConfig> configCenters = configManager.getConfigCenters();
- if (CollectionUtils.isEmpty(configCenters)) {
- ConfigCenterConfig cc = new ConfigCenterConfig();
- cc.setParameters(registryConfig.getParameters() == null ? new HashMap<>() : registryConfig.getParameters());
- cc.getParameters().put(CLIENT_KEY,registryConfig.getClient());
- cc.setProtocol(registryConfig.getProtocol());
- cc.setAddress(registryConfig.getAddress());
- cc.setNamespace(registryConfig.getGroup());
- cc.setHighestPriority(false);
- configManager.addConfigCenter(cc);
- }
- return null;
- });
- }
- startConfigCenter();
+ // we use the loading status of DynamicConfiguration to decide whether ConfigCenter has been initiated.
+ if (Environment.getInstance().getDynamicConfiguration().isPresent()) {
+ return;
+ }
+
+ if (CollectionUtils.isNotEmpty(configManager.getConfigCenters())) {
+ return;
+ }
+
+ configManager.getRegistries().forEach(registryConfig -> {
+ String protocol = registryConfig.getProtocol();
+ String id = "config-center-" + protocol + "-" + registryConfig.getPort();
+ ConfigCenterConfig cc = new ConfigCenterConfig();
+ cc.setId(id);
- cc.setProtocol(protocol);
++ cc.setParameters(registryConfig.getParameters() == null ? new HashMap<>() : registryConfig.getParameters());
++ cc.getParameters().put(CLIENT_KEY,registryConfig.getClient());
++ cc.setProtocol(registryConfig.getProtocol());
+ cc.setAddress(registryConfig.getAddress());
++ cc.setNamespace(registryConfig.getGroup());
+ cc.setHighestPriority(false);
+ configManager.addConfigCenter(cc);
});
+ startConfigCenter();
}
private List<ServiceDiscovery> getServiceDiscoveries() {
@@@ -533,13 -605,13 +610,13 @@@
return null;
}
DynamicConfiguration dynamicConfiguration = getDynamicConfiguration(configCenter.toUrl());
- String configContent = dynamicConfiguration.getConfigs(configCenter.getConfigFile(), configCenter.getGroup());
+ String configContent = dynamicConfiguration.getProperties(configCenter.getConfigFile(), configCenter.getGroup());
- String appGroup = ConfigManager.getInstance().getApplication().orElse(new ApplicationConfig()).getName();
+ String appGroup = configManager.getApplication().orElse(new ApplicationConfig()).getName();
String appConfigContent = null;
- if (StringUtils.isNotEmpty(appGroup)) {
+ if (isNotEmpty(appGroup)) {
- appConfigContent = dynamicConfiguration.getConfigs
+ appConfigContent = dynamicConfiguration.getProperties
- (StringUtils.isNotEmpty(configCenter.getAppConfigFile()) ? configCenter.getAppConfigFile() : configCenter.getConfigFile(),
+ (isNotEmpty(configCenter.getAppConfigFile()) ? configCenter.getAppConfigFile() : configCenter.getConfigFile(),
appGroup
);
}
diff --cc dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java
index 51e7013,84b6ec3..a1dda52
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/DynamicConfiguration.java
@@@ -117,11 -128,26 +117,25 @@@ public interface DynamicConfiguration e
}
/**
- * {@see #getConfig(String, String, long)}
- * <p>
* This method are mostly used to get a compound config file, such as a complete dubbo.properties file.
+ * Also {@see #getConfig(String, String, long)}
*/
- String getConfigs(String key, String group, long timeout) throws IllegalStateException;
+ String getProperties(String key, String group, long timeout) throws IllegalStateException;
+
+ /**
+ * Publish Config mapped to the given key under the {@link #DEFAULT_GROUP default group}
+ *
+ * @param key the key to represent a configuration
+ * @param content the content of configuration
+ * @return <code>true</code> if success, or <code>false</code>
+ * @throws UnsupportedOperationException If the under layer does not support
+ * @since 2.7.4
+ */
+ default boolean publishConfig(String key, String content) throws UnsupportedOperationException {
+ return publishConfig(key, DEFAULT_GROUP, content);
+ }
+
/**
* Publish Config mapped to the given key and the given group.
*
@@@ -170,12 -232,23 +220,23 @@@
* @throws IllegalStateException If timeout exceeds
* @since 2.7.4
*/
- default SortedMap<String, String> getConfigs(String group, long timeout) throws UnsupportedOperationException,
+ default Map<String, String> getConfigs(String group, long timeout) throws UnsupportedOperationException,
IllegalStateException {
- SortedMap<String, String> configs = new TreeMap<>();
- SortedSet<String> configKeys = getConfigKeys(group);
+ Map<String, String> configs = new LinkedHashMap<>();
+ Set<String> configKeys = getConfigKeys(group);
- configKeys.forEach(key -> configs.put(key, getConfig(key, group, timeout)));
+ configKeys.forEach(key -> configs.put(key, getString(key)));
- return Collections.unmodifiableSortedMap(configs);
+ return Collections.unmodifiableMap(configs);
+ }
+
+ /**
+ * Close the configuration
+ *
+ * @throws Exception
+ * @since 2.7.4
+ */
+ @Override
+ default void close() throws Exception {
+ throw new UnsupportedOperationException();
}
/**
@@@ -190,12 -263,16 +251,25 @@@
.getDynamicConfiguration(null));
}
+ /**
+ * Get the instance of {@link DynamicConfiguration} by the specified connection {@link URL}
+ *
+ * @param connectionURL
+ * @return non-null
+ * @since 2.7.4
+ */
+ static DynamicConfiguration getDynamicConfiguration(URL connectionURL) {
+ String protocol = connectionURL.getProtocol();
+ DynamicConfigurationFactory factory = getDynamicConfigurationFactory(protocol);
+ return factory.getDynamicConfiguration(connectionURL);
+ }
++
+ /**
+ * The format is '{interfaceName}:[version]:[group]'
+ *
+ * @return
+ */
+ static String getRuleKey(URL url) {
+ return url.getColonSeparatedKey();
+ }
}
diff --cc dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java
index abcc062,a5196df..de0a884
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java
@@@ -179,14 -180,14 +180,15 @@@ public class RegistryConfig extends Abs
public void setAddress(String address) {
this.address = address;
if (address != null) {
- int i = address.indexOf("://");
- if (i > 0) {
- this.updateIdIfAbsent(address.substring(0, i));
- this.updateProtocolIfAbsent(address.substring(0, i));
- int port = address.lastIndexOf(":");
- if (port > 0) {
- this.updatePortIfAbsent(StringUtils.parseInteger(address.substring(port + 1)));
- }
+ try {
+ URL url = URL.valueOf(address);
++ this.updateIdIfAbsent(url.getProtocol());
++ this.updateProtocolIfAbsent(url.getProtocol());
++ this.updatePortIfAbsent(url.getPort());
+ setUsername(url.getUsername());
+ setPassword(url.getPassword());
- setProtocol(url.getProtocol());
- setPort(url.getPort());
+ setParameters(url.getParameters());
+ } catch (Exception ignored) {
}
}
}
diff --cc dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
index 20253bd,6bcafcd..468c5cb
--- a/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
+++ b/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java
@@@ -46,9 -46,9 +46,7 @@@ import static com.alibaba.nacos.api.Pro
import static com.alibaba.nacos.api.PropertyKeyConst.SECRET_KEY;
import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
import static com.alibaba.nacos.client.naming.utils.UtilAndComs.NACOS_NAMING_LOG_NAME;
--import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_NAMESPACE_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPERATOR;
--import static org.apache.dubbo.common.constants.CommonConstants.PROPERTIES_CHAR_SEPERATOR;
import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;
/**