diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/DiscoveryPropertiesAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/DiscoveryPropertiesAutoConfiguration.java index ab9d8da37..409184782 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/DiscoveryPropertiesAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/DiscoveryPropertiesAutoConfiguration.java @@ -71,7 +71,7 @@ public class DiscoveryPropertiesAutoConfiguration { @Bean @ConditionalOnMissingBean - public NacosConfigModifier nacosConfigModifier(@Autowired(required = false) NacosContextProperties nacosContextProperties){ + public NacosConfigModifier nacosConfigModifier(@Autowired(required = false) NacosContextProperties nacosContextProperties) { return new NacosConfigModifier(nacosContextProperties); } } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosConfigModifier.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosConfigModifier.java index 90cf352bc..e91b69dcc 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosConfigModifier.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosConfigModifier.java @@ -18,6 +18,11 @@ package com.tencent.cloud.polaris.extend.nacos; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Map; +import java.util.Objects; + import com.tencent.cloud.common.constant.ContextConstant; import com.tencent.cloud.polaris.context.PolarisConfigModifier; import com.tencent.polaris.api.config.plugin.DefaultPlugins; @@ -29,12 +34,9 @@ import org.apache.commons.lang.StringUtils; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Map; -import java.util.Objects; - /** + * {@link PolarisConfigModifier} impl of Nacos. + * * @author lingxiao.wlx */ public class NacosConfigModifier implements PolarisConfigModifier { diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosContextProperties.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosContextProperties.java index fbb938df7..a7ca6cc06 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosContextProperties.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosContextProperties.java @@ -22,11 +22,16 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; /** + * Discovery configuration of Nacos. + * * @author lingxiao.wlx */ @ConfigurationProperties("spring.cloud.nacos") public class NacosContextProperties { + /** + * Nacos default group name. + */ public static final String DEFAULT_GROUP = "DEFAULT_GROUP"; private boolean enabled = false; @@ -38,13 +43,13 @@ public class NacosContextProperties { * if you just want to subscribe on nacos , but don't want to register your service, set it to * false. */ - @Value("${spring.cloud.nacos.discovery.registerEnabled:#{'true'}}") + @Value("${spring.cloud.nacos.discovery.register-enabled:#{'true'}}") private boolean registerEnabled; /** * nacos discovery server address. */ - @Value("${spring.cloud.nacos.discovery.serverAddr:}") + @Value("${spring.cloud.nacos.discovery.server-addr:}") private String serverAddr; /** diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java index 90a0283dc..f28a6e23c 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java @@ -46,6 +46,7 @@ public class PolarisRegistration implements Registration { private static final String METADATA_KEY_IP = "internal-ip"; private static final String METADATA_KEY_ADDRESS = "internal-address"; + private static final String GROUP_SERVER_ID_FORMAT = "%s_%s"; private final PolarisDiscoveryProperties polarisDiscoveryProperties; @@ -84,7 +85,7 @@ public class PolarisRegistration implements Registration { else { String group = nacosContextProperties.getGroup(); if (StringUtils.isNotBlank(group) && !DEFAULT_GROUP.equals(group)) { - return group + "_" + polarisDiscoveryProperties.getService(); + return String.format(GROUP_SERVER_ID_FORMAT, group, polarisDiscoveryProperties.getService()); } else { return polarisDiscoveryProperties.getService(); diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java index 3ff76fb3c..129450bca 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java @@ -63,7 +63,7 @@ public class PolarisServiceRegistryAutoConfiguration { PolarisDiscoveryProperties polarisDiscoveryProperties, @Autowired(required = false) ConsulContextProperties consulContextProperties, SDKContext context, StaticMetadataManager staticMetadataManager, NacosContextProperties nacosContextProperties) { - return new PolarisRegistration(polarisDiscoveryProperties, consulContextProperties, context, staticMetadataManager,nacosContextProperties); + return new PolarisRegistration(polarisDiscoveryProperties, consulContextProperties, context, staticMetadataManager, nacosContextProperties); } @Bean diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 115585d91..12a535855 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -65,6 +65,50 @@ "type": "java.lang.Long", "defaultValue": 60000, "description": "Millis interval of refresh of service info list. Default: 60000." + }, + { + "name": "spring.cloud.nacos.discovery.enabled", + "type": "java.lang.Boolean", + "sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties", + "defaultValue": false + }, + { + "name": "spring.cloud.nacos.discovery.group", + "type": "java.lang.String", + "description": "group name for nacos.", + "sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties", + "defaultValue": "DEFAULT_GROUP" + }, + { + "name": "spring.cloud.nacos.discovery.password", + "type": "java.lang.String", + "description": "the nacos authentication password.", + "sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties" + }, + { + "name": "spring.cloud.nacos.discovery.register-enabled", + "type": "java.lang.Boolean", + "description": "if you just want to subscribe on nacos , but don't want to register your service, set it to false.", + "sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties", + "defaultValue": false + }, + { + "name": "spring.cloud.nacos.discovery.server-addr", + "type": "java.lang.String", + "description": "nacos discovery server address.", + "sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties" + }, + { + "name": "spring.cloud.nacos.discovery.username", + "type": "java.lang.String", + "description": "the nacos authentication username.", + "sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties" + }, + { + "name": "spring.cloud.nacos.discovery.cluster-name", + "type": "java.lang.String", + "description": "the nacos authentication cluster-name.", + "sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties" } ] } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/extend/nacos/NacosContextPropertiesTest.java b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/extend/nacos/NacosContextPropertiesTest.java new file mode 100644 index 000000000..3124490ce --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/extend/nacos/NacosContextPropertiesTest.java @@ -0,0 +1,83 @@ +/* + * Tencent is pleased to support the open source community by making Spring Cloud Tencent available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + */ + +package com.tencent.cloud.polaris.extend.nacos; + +import java.util.List; +import java.util.Map; + +import com.tencent.polaris.client.api.SDKContext; +import com.tencent.polaris.factory.config.global.ServerConnectorConfigImpl; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test for {@link NacosContextProperties}. + * + * @author lingxiao.wlx + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = NacosContextPropertiesTest.TestApplication.class) +@ActiveProfiles("test") +public class NacosContextPropertiesTest { + + @Autowired + private NacosContextProperties nacosContextProperties; + + @Autowired + private SDKContext sdkContext; + + @Test + public void testDefaultInitialization() { + assertThat(nacosContextProperties).isNotNull(); + assertThat(nacosContextProperties.isEnabled()).isTrue(); + assertThat(nacosContextProperties.getServerAddr()).isEqualTo("127.0.0.1:8848"); + assertThat(nacosContextProperties.isRegisterEnabled()).isTrue(); + assertThat(nacosContextProperties.isDiscoveryEnabled()).isTrue(); + assertThat(nacosContextProperties.getGroup()).isNotBlank(); + assertThat(nacosContextProperties.getClusterName()).isNotBlank(); + } + + @Test + public void testModify() { + assertThat(sdkContext).isNotNull(); + com.tencent.polaris.api.config.Configuration configuration = sdkContext.getConfig(); + List serverConnectorConfigs = configuration.getGlobal().getServerConnectors(); + Map metadata = null; + for (ServerConnectorConfigImpl serverConnectorConfig : serverConnectorConfigs) { + if (serverConnectorConfig.getId().equals("nacos")) { + metadata = serverConnectorConfig.getMetadata(); + } + } + assertThat(metadata).isNotNull(); + assertThat(metadata.get("internal-nacos-cluster")).isEqualTo("polaris"); + + } + + @SpringBootApplication + protected static class TestApplication { + } +} diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/registry/PolarisRegistrationTest.java b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/registry/PolarisRegistrationTest.java index 1b0f9b424..5b555a499 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/registry/PolarisRegistrationTest.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/registry/PolarisRegistrationTest.java @@ -39,6 +39,7 @@ import static com.tencent.polaris.test.common.Consts.SERVICE_PROVIDER; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * Test for {@link PolarisRegistration}. @@ -50,6 +51,8 @@ public class PolarisRegistrationTest { private PolarisRegistration polarisRegistration; + NacosContextProperties nacosContextProperties = mock(NacosContextProperties.class); + @Before public void setUp() { // mock PolarisDiscoveryProperties @@ -61,7 +64,6 @@ public class PolarisRegistrationTest { // mock ConsulContextProperties consulContextProperties = mock(ConsulContextProperties.class); - NacosContextProperties nacosContextProperties = mock(NacosContextProperties.class); // mock SDKContext APIConfig apiConfig = mock(APIConfig.class); @@ -129,4 +131,13 @@ public class PolarisRegistrationTest { public void testToString() { System.out.println(polarisRegistration); } + + @Test + public void testGetNacosServiceId() { + String groupName = "group"; + String format = "%s_%s"; + when(nacosContextProperties.getGroup()).thenReturn("group"); + String serviceId = polarisRegistration.getServiceId(); + assertThat(String.format(format, groupName, SERVICE_PROVIDER).equals(serviceId)); + } } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/test/resources/application-test.yml b/spring-cloud-starter-tencent-polaris-discovery/src/test/resources/application-test.yml index 8fbdbcc48..d69ae79ff 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/test/resources/application-test.yml +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/resources/application-test.yml @@ -22,3 +22,13 @@ spring: service-name: ${spring.application.name} ip-address: 127.0.0.1 prefer-ip-address: true + nacos: + enabled: true + discovery: + enabled: true + register-enabled: true + group: polaris + server-addr: 127.0.0.1:8848 + username: nacos + password: nacos + cluster-name: polaris diff --git a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml index 64a54bad5..e633eec59 100644 --- a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml @@ -45,9 +45,9 @@ spring: # enabled: true # discovery: # enabled: true -# registerEnabled: true +# register-enabled: true # group: polaris -# serverAddr: 127.0.0.1:8848 +# server-addr: 127.0.0.1:8848 # username: nacos # password: nacos #eureka: