This is an automated email from the ASF dual-hosted git repository. huxing pushed a commit to branch dubbo-4200 in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 23eb7fb50516c62efb6e736cfed55927a22de5f2 Author: Huxing Zhang <huxing.zh...@gmail.com> AuthorDate: Thu May 30 12:44:03 2019 +0800 [Dubbo-4200] Nacos group should be not resolved from key. --- .../support/nacos/NacosDynamicConfiguration.java | 48 ++++++++-------------- .../nacos/NacosDynamicConfigurationTest.java | 10 +++-- .../metadata/store/nacos/NacosMetadataReport.java | 12 +++++- .../store/nacos/NacosMetadataReportTest.java | 8 ++-- 4 files changed, 40 insertions(+), 38 deletions(-) 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 96bec25..9fdb8eb 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 @@ -57,6 +57,10 @@ import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY; public class NacosDynamicConfiguration implements DynamicConfiguration { private final Logger logger = LoggerFactory.getLogger(getClass()); + /** + * the default timeout in millis to get config from nacos + */ + private static final long DEFAULT_TIMEOUT = 5000L; /** * The final root path would be: /$NAME_SPACE/config @@ -93,24 +97,14 @@ public class NacosDynamicConfiguration implements DynamicConfiguration { return configService; } - public void publishNacosConfig(String key, String value) { + public void publishNacosConfig(String key, String group, String value) { try { - String[] keyAndGroup = getKeyAndGroup(key); - configService.publishConfig(keyAndGroup[0], keyAndGroup[1], value); + configService.publishConfig(key, group, value); } catch (NacosException e) { logger.error(e.getErrMsg()); } } - private String[] getKeyAndGroup(String key) { - int i = key.lastIndexOf(GROUP_CHAR_SEPERATOR); - if (i < 0) { - return new String[]{key, null}; - } else { - return new String[]{key.substring(0, i), key.substring(i+1)}; - } - } - private Properties buildNacosProperties(URL url) { Properties properties = new Properties(); setServerAddr(url, properties); @@ -164,32 +158,19 @@ public class NacosDynamicConfiguration implements DynamicConfiguration { @Override public void addListener(String key, String group, ConfigurationListener listener) { - String[] keyAndGroup = getKeyAndGroup(key); - if (keyAndGroup[1] != null) { - group = keyAndGroup[1]; - } - String finalGroup = group; - NacosConfigListener nacosConfigListener = watchListenerMap.computeIfAbsent(generateKey(key, group), k -> createTargetListener(key, finalGroup)); String keyInNacos = rootPath + PROPERTIES_CHAR_SEPERATOR + key; + NacosConfigListener nacosConfigListener = watchListenerMap.computeIfAbsent(key, k -> createTargetListener(keyInNacos, group)); nacosConfigListener.addListener(listener); try { configService.addListener(keyInNacos, group, nacosConfigListener); - System.out.println("1"); } catch (NacosException e) { logger.error(e.getMessage()); } } - private String generateKey(String key, String group) { - if (StringUtils.isNotEmpty(group)) { - key = key + GROUP_CHAR_SEPERATOR + group; - } - return key; - } - @Override public void removeListener(String key, String group, ConfigurationListener listener) { - NacosConfigListener eventListener = watchListenerMap.get(generateKey(key, group)); + NacosConfigListener eventListener = watchListenerMap.get(key); if (eventListener != null) { eventListener.removeListener(listener); } @@ -197,8 +178,14 @@ public class NacosDynamicConfiguration implements DynamicConfiguration { @Override public String getConfig(String key, String group, long timeout) throws IllegalStateException { - key = generateKey(key, group); - return (String) getInternalProperty(rootPath + PROPERTIES_CHAR_SEPERATOR + key); + try { + String keyInNacos = rootPath + PROPERTIES_CHAR_SEPERATOR + key; + long nacosTimeout = timeout < 0 ? DEFAULT_TIMEOUT : timeout; + return configService.getConfig(keyInNacos, group, nacosTimeout); + } catch (NacosException e) { + logger.error(e.getMessage()); + } + return null; } @Override @@ -209,8 +196,7 @@ public class NacosDynamicConfiguration implements DynamicConfiguration { @Override public Object getInternalProperty(String key) { try { - String[] keyAndGroup = getKeyAndGroup(key); - return configService.getConfig(keyAndGroup[0], keyAndGroup[1], 5000L); + return configService.getConfig(key, null, 5000L); } catch (NacosException e) { logger.error(e.getMessage()); } 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 ff785b9..df65c63 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 @@ -47,7 +47,7 @@ public class NacosDynamicConfigurationTest { put("dubbo-config-org.apache.dubbo.nacos.testService.configurators", "hello"); Thread.sleep(200); - put("dubbo-config-dubbo.properties:test", "aaa=bbb"); + put("dubbo-config-dubbo.properties", "test", "aaa=bbb"); Thread.sleep(200); Assertions.assertEquals("hello", config.getConfig("org.apache.dubbo.nacos.testService.configurators")); Assertions.assertEquals("aaa=bbb", config.getConfig("dubbo.properties", "test")); @@ -89,8 +89,12 @@ public class NacosDynamicConfigurationTest { } private void put(String key, String value) { + put(key, "", value); + } + + private void put(String key, String group, String value) { try { - config.publishNacosConfig(key, value); + config.publishNacosConfig(key, "dubbo", value); } catch (Exception e) { System.out.println("Error put value to nacos."); } @@ -121,7 +125,7 @@ public class NacosDynamicConfigurationTest { @Override public void process(ConfigChangeEvent event) { System.out.println(this + ": " + event); - Integer count = countMap.computeIfAbsent(event.getKey(), k -> new Integer(0)); + Integer count = countMap.computeIfAbsent(event.getKey(), k -> 0); countMap.put(event.getKey(), ++count); value = event.getValue(); latch.countDown(); diff --git a/dubbo-metadata-report/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReport.java b/dubbo-metadata-report/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReport.java index 03bdeb8..b12e4f0 100644 --- a/dubbo-metadata-report/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReport.java +++ b/dubbo-metadata-report/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReport.java @@ -37,18 +37,28 @@ import static com.alibaba.nacos.api.PropertyKeyConst.ENDPOINT; import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE; import static com.alibaba.nacos.api.PropertyKeyConst.CLUSTER_NAME; import static com.alibaba.nacos.client.naming.utils.UtilAndComs.NACOS_NAMING_LOG_NAME; +import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY; import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY; /** * metadata report impl for nacos */ public class NacosMetadataReport extends AbstractMetadataReport { + private static final Logger logger = LoggerFactory.getLogger(NacosMetadataReport.class); + private ConfigService configService; + /** + * The group used to store metadata in Nacos + */ + private String group; + + public NacosMetadataReport(URL url) { super(url); this.configService = buildConfigService(url); + group = url.getParameter(GROUP_KEY, DEFAULT_ROOT); } public ConfigService buildConfigService(URL url) { @@ -113,7 +123,7 @@ public class NacosMetadataReport extends AbstractMetadataReport { private void storeMetadata(MetadataIdentifier identifier, String value) { try { - boolean publishResult = configService.publishConfig(identifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY), identifier.getGroup(), value); + boolean publishResult = configService.publishConfig(identifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY), group, value); if (!publishResult) { throw new RuntimeException("publish nacos metadata failed"); } diff --git a/dubbo-metadata-report/dubbo-metadata-report-nacos/src/test/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReportTest.java b/dubbo-metadata-report/dubbo-metadata-report-nacos/src/test/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReportTest.java index 07d6f8b..2f6b9e5 100644 --- a/dubbo-metadata-report/dubbo-metadata-report-nacos/src/test/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReportTest.java +++ b/dubbo-metadata-report/dubbo-metadata-report-nacos/src/test/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReportTest.java @@ -45,10 +45,12 @@ public class NacosMetadataReportTest { private NacosMetadataReportFactory nacosMetadataReportFactory; private ConfigService configService; + private static final String group = "zzz"; + @BeforeEach public void setUp() { // timeout in 15 seconds. - URL url = URL.valueOf("nacos://127.0.0.1:8848") + URL url = URL.valueOf("nacos://127.0.0.1:8848?group=" + group) .addParameter(SESSION_TIMEOUT_KEY, 15000); nacosMetadataReportFactory = new NacosMetadataReportFactory(); this.nacosMetadataReport = (NacosMetadataReport) nacosMetadataReportFactory.createMetadataReport(url); @@ -66,7 +68,7 @@ public class NacosMetadataReportTest { String application = "nacos-metdata-report-test"; MetadataIdentifier providerIdentifier = storeProvider(nacosMetadataReport, TEST_SERVICE, version, group, application); - String serverContent = configService.getConfig(providerIdentifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY), group, 5000L); + String serverContent = configService.getConfig(providerIdentifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY), "zzz", 5000L); Assertions.assertNotNull(serverContent); Gson gson = new Gson(); @@ -81,7 +83,7 @@ public class NacosMetadataReportTest { String application = "nacos-metadata-report-consumer-test"; MetadataIdentifier consumerIdentifier = storeConsumer(nacosMetadataReport, TEST_SERVICE, version, group, application); - String serverContent = configService.getConfig(consumerIdentifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY), group, 5000L); + String serverContent = configService.getConfig(consumerIdentifier.getUniqueKey(MetadataIdentifier.KeyTypeEnum.UNIQUE_KEY), "zzz", 5000L); Assertions.assertNotNull(serverContent); Assertions.assertEquals(serverContent, "{\"paramConsumerTest\":\"nacosConsumer\"}"); }