From ec16ba4aef01ffe722b91d7281c4699a34290417 Mon Sep 17 00:00:00 2001 From: Mercy Ma Date: Mon, 18 Nov 2019 17:22:25 +0800 Subject: [PATCH] [Refactor] Refactor the DynamicConfiguration interface #5339 (#5340) * Polish apache/dubbo#5306 : [Migration] Upgrade the @since tags in Javadoc migration cloud native to master * Polish apache/dubbo#5306 : [Migration] Upgrade the @since tags in Javadoc migration cloud native to master * Polish apache/dubbo#5309 : [ISSURE] The beans of Dubbo's Config can't be found on the ReferenceBean's initialization * Polish apache/dubbo#5312 : Resolve the demos' issues of zookeeper and nacos * Polish apache/dubbo#5313 : [Migration] migrate the code in common module from cloud-native branch to master * Polish apache/dubbo#5316 : [Refactor] Replace @EnableDubboConfigBinding Using spring-context-support * Polish apache/dubbo#5317 : [Refactor] Refactor ReferenceAnnotationBeanPostProcessor using Alibaba spring-context-suuport API * Polish apache/dubbo#5321 : Remove BeanFactoryUtils * Polish apache/dubbo#5321 : Remove AnnotatedBeanDefinitionRegistryUtils * Polish apache/dubbo#5321 : Remove AnnotationUtils * Polish apache/dubbo#5321 : Remove ClassUtils * Polish apache/dubbo#5321 : Remove BeanRegistrar * Polish apache/dubbo#5321 : Remove ObjectUtils * Polish apache/dubbo#5321 : Remove PropertySourcesUtils * Polish apache/dubbo#5325 : [Migration] To migrate dubbo-metadata-api from cloud-native branch * Polish apache/dubbo#5326 : [Migration] To migrate dubbo-metadata-processor from cloud-native branch * Polish apache/dubbo#5329 : [Feature] To add the default metadata into ServiceInstance * Polish apache/dubbo#5339 : [Refactor] Refactor the DynamicConfiguration interface --- .../support/AbstractClusterInvoker.java | 2 +- .../configcenter/DynamicConfiguration.java | 7 +-- .../file/FileSystemDynamicConfiguration.java | 2 +- .../nop/NopDynamicConfiguration.java | 2 +- .../CompositeDynamicConfiguration.java | 4 +- .../dubbo/common/utils/StringUtils.java | 21 ++++---- .../AbstractDynamicConfigurationTest.java | 2 +- .../consul/ConsulDynamicConfiguration.java | 5 +- .../nacos/NacosDynamicConfiguration.java | 48 ++++++++++--------- .../nacos/NacosDynamicConfigurationTest.java | 2 +- .../ZookeeperDynamicConfiguration.java | 7 ++- .../ZookeeperDynamicConfigurationTest.java | 2 +- ...ynamicConfigurationServiceNameMapping.java | 29 +++++------ ...icConfigurationServiceNameMappingTest.java | 10 ++-- .../org/apache/dubbo/qos/textui/TTable.java | 10 ++-- .../org/apache/dubbo/qos/textui/TTree.java | 4 +- .../client/FileSystemServiceDiscovery.java | 6 +-- 17 files changed, 79 insertions(+), 84 deletions(-) diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java index d5437bf905e..972e95c1d92 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/support/AbstractClusterInvoker.java @@ -130,7 +130,7 @@ protected Invoker select(LoadBalance loadbalance, Invocation invocation, if (CollectionUtils.isEmpty(invokers)) { return null; } - String methodName = invocation == null ? StringUtils.EMPTY : invocation.getMethodName(); + String methodName = invocation == null ? StringUtils.EMPTY_STRING : invocation.getMethodName(); boolean sticky = invokers.get(0).getUrl() .getMethodParameter(methodName, CLUSTER_STICKY_KEY, DEFAULT_CLUSTER_STICKY); diff --git 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 index 29b50b6e9c9..398ed6f37a1 100644 --- 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 @@ -45,8 +45,6 @@ public interface DynamicConfiguration extends Configuration, AutoCloseable { String DEFAULT_GROUP = "dubbo"; - String DEFAULT_MAPPING_GROUP = "mapping"; - /** * {@link #addListener(String, String, ConfigurationListener)} * @@ -138,7 +136,7 @@ default String getProperties(String key, String group, long timeout) throws Ille * @since 2.7.5 */ default boolean publishConfig(String key, String content) throws UnsupportedOperationException { - return publishConfig(key, DEFAULT_MAPPING_GROUP, content); + return publishConfig(key, DEFAULT_GROUP, content); } /** @@ -159,12 +157,11 @@ default boolean publishConfig(String key, String group, String content) throws U * Get the config keys by the specified group * * @param group the specified group - * @param rootKey the * @return the read-only non-null sorted {@link Set set} of config keys * @throws UnsupportedOperationException If the under layer does not support * @since 2.7.5 */ - default SortedSet getConfigKeys(String group, String rootKey) throws UnsupportedOperationException { + default SortedSet getConfigKeys(String group) throws UnsupportedOperationException { throw new UnsupportedOperationException("No support"); } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfiguration.java index e6b49f8063b..ff2432f2e2e 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/file/FileSystemDynamicConfiguration.java @@ -368,7 +368,7 @@ public boolean publishConfig(String key, String group, String content) { } @Override - public SortedSet getConfigKeys(String group, String key) { + public SortedSet getConfigKeys(String group) { File[] files = groupDirectory(group).listFiles(File::isFile); if (files == null) { return new TreeSet<>(); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java index ae2b3a0b4f8..dfc0d0da1fe 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java @@ -66,7 +66,7 @@ public boolean publishConfig(String key, String group, String content) { * @since 2.7.5 */ @Override - public SortedSet getConfigKeys(String group, String key) { + public SortedSet getConfigKeys(String group) { return null; } } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java index 4e21a016b33..c33a15d9b9d 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java @@ -78,8 +78,8 @@ public boolean publishConfig(String key, String group, String content) throws Un @Override @SuppressWarnings("unchecked") - public SortedSet getConfigKeys(String group, String key) throws UnsupportedOperationException { - return (SortedSet) iterateConfigOperation(configuration -> configuration.getConfigKeys(group, key)); + public SortedSet getConfigKeys(String group) throws UnsupportedOperationException { + return (SortedSet) iterateConfigOperation(configuration -> configuration.getConfigKeys(group)); } private void iterateListenerOperation(Consumer consumer) { diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java index c9048001073..7ef3b08019d 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java @@ -50,7 +50,7 @@ public final class StringUtils { - public static final String EMPTY = ""; + public static final String EMPTY_STRING = ""; public static final int INDEX_NOT_FOUND = -1; public static final String[] EMPTY_STRING_ARRAY = new String[0]; @@ -82,10 +82,9 @@ public final class StringUtils { public static final String SLASH = valueOf(SLASH_CHAR); - /** - * The empty value - */ - public static final String EMPTY_VALUE = ""; + public static final char HYPHEN_CHAR = '-'; + + public static final String HYPHEN = valueOf(HYPHEN_CHAR); private StringUtils() { } @@ -127,7 +126,7 @@ public static String repeat(final String str, final int repeat) { return null; } if (repeat <= 0) { - return EMPTY; + return EMPTY_STRING; } final int inputLength = str.length(); if (repeat == 1 || inputLength == 0) { @@ -653,7 +652,7 @@ public static String[] split(String str, char ch) { */ public static String join(String[] array) { if (ArrayUtils.isEmpty(array)) { - return EMPTY; + return EMPTY_STRING; } StringBuilder sb = new StringBuilder(); for (String s : array) { @@ -671,7 +670,7 @@ public static String join(String[] array) { */ public static String join(String[] array, char split) { if (ArrayUtils.isEmpty(array)) { - return EMPTY; + return EMPTY_STRING; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < array.length; i++) { @@ -692,7 +691,7 @@ public static String join(String[] array, char split) { */ public static String join(String[] array, String split) { if (ArrayUtils.isEmpty(array)) { - return EMPTY; + return EMPTY_STRING; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < array.length; i++) { @@ -706,7 +705,7 @@ public static String join(String[] array, String split) { public static String join(Collection coll, String split) { if (CollectionUtils.isEmpty(coll)) { - return EMPTY; + return EMPTY_STRING; } StringBuilder sb = new StringBuilder(); @@ -858,7 +857,7 @@ public static boolean isAllUpperCase(String str) { if (str != null && !isEmpty(str)) { int sz = str.length(); - for(int i = 0; i < sz; ++i) { + for (int i = 0; i < sz; ++i) { if (!Character.isUpperCase(str.charAt(i))) { return false; } diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfigurationTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfigurationTest.java index 5f41b09e7cd..00d58f6d320 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfigurationTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfigurationTest.java @@ -111,7 +111,7 @@ public void testPublishConfig() { @Test public void testGetConfigKeys() { - assertThrows(UnsupportedOperationException.class, () -> configuration.getConfigKeys(null, null), "No support"); + assertThrows(UnsupportedOperationException.class, () -> configuration.getConfigKeys(null), "No support"); } @Test diff --git a/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java index dc02de99d23..f1aeed2801a 100644 --- a/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-consul/src/main/java/org/apache/dubbo/configcenter/consul/ConsulDynamicConfiguration.java @@ -46,6 +46,7 @@ import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_NAMESPACE_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR; +import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING; /** * config center implementation for consul @@ -95,9 +96,9 @@ public String getConfig(String key, String group, long timeout) throws IllegalSt } @Override - public SortedSet getConfigKeys(String group, String key) throws UnsupportedOperationException { + public SortedSet getConfigKeys(String group) throws UnsupportedOperationException { SortedSet configKeys = new TreeSet<>(); - String normalizedKey = convertKey(group, key); + String normalizedKey = convertKey(group, EMPTY_STRING); List keys = kvClient.getKeys(normalizedKey); if (CollectionUtils.isNotEmpty(keys)) { keys.stream() diff --git 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 index cb5d9303390..11f02f64506 100644 --- 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 @@ -61,6 +61,8 @@ import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY; +import static org.apache.dubbo.common.utils.StringUtils.HYPHEN_CHAR; +import static org.apache.dubbo.common.utils.StringUtils.SLASH_CHAR; /** * The nacos implementation of {@link DynamicConfiguration} @@ -175,10 +177,12 @@ private NacosConfigListener createTargetListener(String key, String group) { @Override public void addListener(String key, String group, ConfigurationListener listener) { - NacosConfigListener nacosConfigListener = watchListenerMap.computeIfAbsent(key, k -> createTargetListener(key, group)); + String resolvedGroup = resolveGroup(group); + String listenerKey = buildListenerKey(key, group); + NacosConfigListener nacosConfigListener = watchListenerMap.computeIfAbsent(listenerKey, k -> createTargetListener(key, resolvedGroup)); nacosConfigListener.addListener(listener); try { - configService.addListener(key, group, nacosConfigListener); + configService.addListener(key, resolvedGroup, nacosConfigListener); } catch (NacosException e) { logger.error(e.getMessage()); } @@ -186,7 +190,8 @@ public void addListener(String key, String group, ConfigurationListener listener @Override public void removeListener(String key, String group, ConfigurationListener listener) { - NacosConfigListener eventListener = watchListenerMap.get(key); + String listenerKey = buildListenerKey(key, group); + NacosConfigListener eventListener = watchListenerMap.get(listenerKey); if (eventListener != null) { eventListener.removeListener(listener); } @@ -194,12 +199,13 @@ public void removeListener(String key, String group, ConfigurationListener liste @Override public String getConfig(String key, String group, long timeout) throws IllegalStateException { + String resolvedGroup = resolveGroup(group); try { long nacosTimeout = timeout < 0 ? DEFAULT_TIMEOUT : timeout; - if (StringUtils.isEmpty(group)) { - group = DEFAULT_GROUP; + if (StringUtils.isEmpty(resolvedGroup)) { + resolvedGroup = DEFAULT_GROUP; } - return configService.getConfig(key, group, nacosTimeout); + return configService.getConfig(key, resolvedGroup, nacosTimeout); } catch (NacosException e) { logger.error(e.getMessage()); } @@ -219,12 +225,13 @@ public Object getInternalProperty(String key) { @Override public boolean publishConfig(String key, String group, String content) { boolean published = false; + String resolvedGroup = resolveGroup(group); try { - String value = configService.getConfig(key, group, -1L); + String value = configService.getConfig(key, resolvedGroup, -1L); if (StringUtils.isNotEmpty(value)) { content = value + "," + content; } - published = configService.publishConfig(key, group, content); + published = configService.publishConfig(key, resolvedGroup, content); } catch (NacosException e) { logger.error(e.getErrMsg()); } @@ -234,19 +241,19 @@ public boolean publishConfig(String key, String group, String content) { /** * TODO Nacos does not support atomic update of the value mapped to a key. * - * @param group the specified group * @param key + * @param group the specified group * @return */ @Override - public SortedSet getConfigKeys(String group, String key) { + public SortedSet getConfigKeys(String group) { // TODO use Nacos Client API to replace HTTP Open API SortedSet keys = new TreeSet<>(); try { List paramsValues = asList( "search", "accurate", "dataId", "", - "group", group, + "group", resolveGroup(group), "pageNo", "1", "pageSize", String.valueOf(Integer.MAX_VALUE) ); @@ -260,17 +267,6 @@ public SortedSet getConfigKeys(String group, String key) { } } return keys; - -// SortedSet configKeys = new TreeSet<>(); -// try { -// String value = configService.getConfig(key, group, -1L); -// if (value != null) { -// Collections.addAll(configKeys, value.split(",")); -// } -// } catch (NacosException e) { -// logger.error(e.getErrMsg()); -// } -// return configKeys; } private Stream toKeysStream(String content) { @@ -336,4 +332,12 @@ private ConfigChangeType getChangeType(String configInfo, String oldValue) { return ConfigChangeType.MODIFIED; } } + + protected String buildListenerKey(String key, String group) { + return key + HYPHEN_CHAR + resolveGroup(group); + } + + protected String resolveGroup(String group) { + return group.replace(SLASH_CHAR, HYPHEN_CHAR); + } } diff --git a/dubbo-configcenter/dubbo-configcenter-nacos/src/test/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfigurationTest.java b/dubbo-configcenter/dubbo-configcenter-nacos/src/test/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfigurationTest.java index 8537beca10d..ac2978d843b 100644 --- a/dubbo-configcenter/dubbo-configcenter-nacos/src/test/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfigurationTest.java +++ b/dubbo-configcenter/dubbo-configcenter-nacos/src/test/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfigurationTest.java @@ -106,7 +106,7 @@ public void testGetConfigKeys() { put("key1", "a"); put("key2", "b"); - SortedSet keys = config.getConfigKeys(DynamicConfiguration.DEFAULT_GROUP, null); + SortedSet keys = config.getConfigKeys(DynamicConfiguration.DEFAULT_GROUP); Assertions.assertFalse(keys.isEmpty()); diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java index 50aac74d253..039b57f2dd6 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java @@ -40,14 +40,13 @@ import static org.apache.dubbo.common.config.configcenter.Constants.CONFIG_NAMESPACE_KEY; import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR; import static org.apache.dubbo.common.utils.CollectionUtils.isEmpty; +import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING; /** * */ public class ZookeeperDynamicConfiguration implements DynamicConfiguration { - private static final String EMPTY_STRING = ""; - private static final Logger logger = LoggerFactory.getLogger(ZookeeperDynamicConfiguration.class); private Executor executor; @@ -118,8 +117,8 @@ public boolean publishConfig(String key, String group, String content) { } @Override - public SortedSet getConfigKeys(String group, String key) { - String path = getPathKey(group, key); + public SortedSet getConfigKeys(String group) { + String path = getPathKey(group, EMPTY_STRING); List nodes = zkClient.getChildren(path); return isEmpty(nodes) ? emptySortedSet() : unmodifiableSortedSet(new TreeSet<>(nodes)); } diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java index aa77fbb59af..cc2ac4cb70e 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/test/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfigurationTest.java @@ -149,7 +149,7 @@ public void testGetConfigKeysAndContents() { assertTrue(configuration.publishConfig(key, group, content)); assertTrue(configuration.publishConfig(key2, group, content)); - Set configKeys = configuration.getConfigKeys(group, key); + Set configKeys = configuration.getConfigKeys(group); assertEquals(new TreeSet(asList(content)), configKeys); } diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java index 65981f51bd3..d84eba02b65 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMapping.java @@ -19,27 +19,25 @@ import org.apache.dubbo.common.config.configcenter.DynamicConfiguration; import org.apache.dubbo.common.logger.Logger; import org.apache.dubbo.common.logger.LoggerFactory; -import org.apache.dubbo.rpc.model.ApplicationModel; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import static java.lang.String.valueOf; import static java.util.Arrays.asList; -import static org.apache.dubbo.common.config.configcenter.DynamicConfiguration.DEFAULT_MAPPING_GROUP; -import static org.apache.dubbo.common.utils.StringUtils.isBlank; +import static org.apache.dubbo.common.utils.StringUtils.SLASH; +import static org.apache.dubbo.rpc.model.ApplicationModel.getName; /** * The {@link ServiceNameMapping} implementation based on {@link DynamicConfiguration} */ public class DynamicConfigurationServiceNameMapping implements ServiceNameMapping { - private static final List IGNORED_SERVICE_INTERFACES = asList(MetadataService.class.getName()); - - private static final String SEPARATOR = ":"; + public static String DEFAULT_MAPPING_GROUP = "mapping"; - private static final String EMPTY = ""; + private static final List IGNORED_SERVICE_INTERFACES = asList(MetadataService.class.getName()); private final Logger logger = LoggerFactory.getLogger(getClass()); @@ -55,12 +53,13 @@ public void map(String serviceInterface, String group, String version, String pr // the Dubbo Service Key as group // the service(application) name as key // It does matter whatever the content is, we just need a record - String app = ApplicationModel.getApplication(); + String key = getName(); + String content = valueOf(System.currentTimeMillis()); execute(() -> { - dynamicConfiguration.publishConfig(buildKey(serviceInterface, group, version, protocol), app); + dynamicConfiguration.publishConfig(key, buildGroup(serviceInterface, group, version, protocol), content); if (logger.isInfoEnabled()) { logger.info(String.format("Dubbo service[%s] mapped to interface name[%s].", - app, serviceInterface, app)); + group, serviceInterface, group)); } }); } @@ -72,24 +71,20 @@ public Set get(String serviceInterface, String group, String version, St Set serviceNames = new LinkedHashSet<>(); execute(() -> { - Set keys = dynamicConfiguration.getConfigKeys(DEFAULT_MAPPING_GROUP, buildKey(serviceInterface, group, version, protocol)); + Set keys = dynamicConfiguration.getConfigKeys(buildGroup(serviceInterface, group, version, protocol)); serviceNames.addAll(keys); }); return Collections.unmodifiableSet(serviceNames); } - protected static String buildKey(String serviceInterface, String group, String version, String protocol) { + protected static String buildGroup(String serviceInterface, String group, String version, String protocol) { // the issue : https://github.com/apache/dubbo/issues/4671 // StringBuilder groupBuilder = new StringBuilder(serviceInterface) // .append(KEY_SEPARATOR).append(defaultString(group)) // .append(KEY_SEPARATOR).append(defaultString(version)) // .append(KEY_SEPARATOR).append(defaultString(protocol)); // return groupBuilder.toString(); - return serviceInterface; - } - - private static String defaultString(String value) { - return isBlank(value) ? EMPTY : value; + return DEFAULT_MAPPING_GROUP + SLASH + serviceInterface; } private void execute(Runnable runnable) { diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMappingTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMappingTest.java index 9cb78a10fd8..fd1bfe28fef 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMappingTest.java +++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/DynamicConfigurationServiceNameMappingTest.java @@ -28,7 +28,7 @@ import static java.util.Arrays.asList; import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader; -import static org.apache.dubbo.metadata.DynamicConfigurationServiceNameMapping.buildKey; +import static org.apache.dubbo.metadata.DynamicConfigurationServiceNameMapping.buildGroup; import static org.apache.dubbo.metadata.ServiceNameMapping.getDefaultExtension; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -54,10 +54,10 @@ public static void setUp() throws Exception { @Test public void testBuildGroup() { - assertEquals("test", buildKey("test", null, null, null)); - assertEquals("test", buildKey("test", "default", null, null)); - assertEquals("test", buildKey("test", "default", "1.0.0", null)); - assertEquals("test", buildKey("test", "default", "1.0.0", "dubbo")); + assertEquals("test", buildGroup("test", null, null, null)); + assertEquals("test", buildGroup("test", "default", null, null)); + assertEquals("test", buildGroup("test", "default", "1.0.0", null)); + assertEquals("test", buildGroup("test", "default", "1.0.0", "dubbo")); } @Test diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/textui/TTable.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/textui/TTable.java index c9a67157282..24b83083ca9 100644 --- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/textui/TTable.java +++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/textui/TTable.java @@ -24,7 +24,7 @@ import static java.lang.Math.abs; import static java.lang.Math.max; import static java.lang.String.format; -import static org.apache.dubbo.common.utils.StringUtils.EMPTY; +import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING; import static org.apache.dubbo.common.utils.StringUtils.length; import static org.apache.dubbo.common.utils.StringUtils.repeat; import static org.apache.dubbo.common.utils.StringUtils.replace; @@ -128,7 +128,7 @@ private String drawRow(int[] widthCacheArray, int rowIndex) { && border.has(Border.BORDER_INNER_V)) { borderChar = "|"; } else { - borderChar = EMPTY; + borderChar = EMPTY_STRING; } @@ -143,7 +143,7 @@ private String drawRow(int[] widthCacheArray, int rowIndex) { data = scanner.nextLine(); hasNextLine = true; } else { - data = EMPTY; + data = EMPTY_STRING; } if (width > 0) { @@ -181,7 +181,7 @@ private String drawRow(int[] widthCacheArray, int rowIndex) { private String getData(int rowIndex, ColumnDefine columnDefine) { return columnDefine.getRowCount() <= rowIndex - ? EMPTY + ? EMPTY_STRING : columnDefine.rows.get(rowIndex); } @@ -278,7 +278,7 @@ public TTable addRow(Object... columnDataArray) { && null != columnDataArray[index]) { columnDefine.rows.add(replaceTab(columnDataArray[index].toString())); } else { - columnDefine.rows.add(EMPTY); + columnDefine.rows.add(EMPTY_STRING); } } } diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/textui/TTree.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/textui/TTree.java index 50dca53f537..337f0b2ebd7 100644 --- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/textui/TTree.java +++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/textui/TTree.java @@ -22,7 +22,7 @@ import java.util.Scanner; import static java.lang.System.currentTimeMillis; -import static org.apache.dubbo.common.utils.StringUtils.EMPTY; +import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING; import static org.apache.dubbo.common.utils.StringUtils.length; import static org.apache.dubbo.common.utils.StringUtils.repeat; @@ -87,7 +87,7 @@ public void callback(int deep, boolean isLast, String prefix, Node node) { } else { treeSB.append(prefix) .append(repeat(' ', stepStringLength)) - .append(hasChild ? "|" : EMPTY) + .append(hasChild ? "|" : EMPTY_STRING) .append(repeat(' ', costPrefixLength)) .append(scanner.nextLine()) .append(System.lineSeparator()); diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/FileSystemServiceDiscovery.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/FileSystemServiceDiscovery.java index 776544417d3..82bc8609e27 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/FileSystemServiceDiscovery.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/FileSystemServiceDiscovery.java @@ -45,7 +45,7 @@ import static com.alibaba.fastjson.JSON.toJSONString; import static java.lang.String.format; import static java.nio.channels.FileChannel.open; -import static org.apache.dubbo.common.config.configcenter.DynamicConfiguration.DEFAULT_MAPPING_GROUP; +import static org.apache.dubbo.common.config.configcenter.DynamicConfiguration.DEFAULT_GROUP; import static org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfiguration.CONFIG_CENTER_DIR_PARAM_NAME; /** @@ -80,7 +80,7 @@ private void registerDubboShutdownHook() { private void registerListener() { getServices().forEach(serviceName -> { - dynamicConfiguration.getConfigKeys(DEFAULT_MAPPING_GROUP, serviceName).forEach(serviceInstanceId -> { + dynamicConfiguration.getConfigKeys(DEFAULT_GROUP).forEach(serviceInstanceId -> { dynamicConfiguration.addListener(serviceInstanceId, serviceName, this::onConfigChanged); }); }); @@ -121,7 +121,7 @@ private String getServiceName(ServiceInstance serviceInstance) { @Override public List getInstances(String serviceName) { - return dynamicConfiguration.getConfigKeys(DEFAULT_MAPPING_GROUP, serviceName) + return dynamicConfiguration.getConfigKeys(DEFAULT_GROUP) .stream() .map(serviceInstanceId -> dynamicConfiguration.getConfig(serviceInstanceId, serviceName)) .map(content -> JSON.parseObject(content, DefaultServiceInstance.class))