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 68f799cc6..6f8cbf78d 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 @@ -20,6 +20,7 @@ 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; @@ -29,6 +30,7 @@ import com.tencent.polaris.factory.config.ConfigurationImpl; import com.tencent.polaris.factory.config.consumer.DiscoveryConfigImpl; import com.tencent.polaris.factory.config.global.ServerConnectorConfigImpl; import com.tencent.polaris.factory.config.provider.RegisterConfigImpl; +import org.apache.commons.lang.StringUtils; import org.springframework.util.CollectionUtils; @@ -39,7 +41,18 @@ import org.springframework.util.CollectionUtils; */ public class NacosConfigModifier implements PolarisConfigModifier { private static final String ID = "nacos"; - private static final String ADDRESS_FORMAT = "%s:%s@%s"; + /** + * nacos username. + */ + public static final String USERNAME = "username"; + /** + * nacos password. + */ + public static final String PASSWORD = "password"; + /** + * nacos contextPath. + */ + public static final String CONTEXT_PATH = "contextPath"; private final NacosContextProperties nacosContextProperties; @@ -61,11 +74,27 @@ public class NacosConfigModifier implements PolarisConfigModifier { } ServerConnectorConfigImpl serverConnectorConfig = new ServerConnectorConfigImpl(); serverConnectorConfig.setId(ID); - // Nacos Address URI: nacos:nacos@127.0.0.1:8848 - String address = String.format(ADDRESS_FORMAT, nacosContextProperties.getUsername(), nacosContextProperties.getPassword(), nacosContextProperties.getServerAddr()); + if (StringUtils.isBlank(nacosContextProperties.getServerAddr())) { + throw new IllegalArgumentException("nacos server addr must not be empty, please set it by" + + "spring.cloud.nacos.discovery.server-addr"); + } serverConnectorConfig.setAddresses( - Collections.singletonList(address)); + Collections.singletonList(nacosContextProperties.getServerAddr())); serverConnectorConfig.setProtocol(DefaultPlugins.SERVER_CONNECTOR_NACOS); + + Map metadata = serverConnectorConfig.getMetadata(); + if (StringUtils.isNotBlank(nacosContextProperties.getUsername())) { + metadata.put(USERNAME, nacosContextProperties.getUsername()); + } + + if (StringUtils.isNotBlank(nacosContextProperties.getPassword())) { + metadata.put(PASSWORD, nacosContextProperties.getPassword()); + } + + if (StringUtils.isNotBlank(nacosContextProperties.getContextPath())) { + metadata.put(CONTEXT_PATH, nacosContextProperties.getContextPath()); + } + configuration.getGlobal().getServerConnectors().add(serverConnectorConfig); DiscoveryConfigImpl discoveryConfig = new DiscoveryConfigImpl(); discoveryConfig.setServerConnectorId(ID); 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 4c0198066..83457a09e 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 @@ -81,6 +81,8 @@ public class NacosContextProperties { @Value("${spring.cloud.nacos.discovery.group:DEFAULT_GROUP}") private String group = DEFAULT_GROUP; + private String contextPath; + public boolean isEnabled() { return enabled; } @@ -145,6 +147,14 @@ public class NacosContextProperties { this.group = group; } + public String getContextPath() { + return contextPath; + } + + public void setContextPath(String contextPath) { + this.contextPath = contextPath; + } + @Override public String toString() { return "NacosContextProperties{" + @@ -156,6 +166,7 @@ public class NacosContextProperties { ", password='" + password + '\'' + ", clusterName='" + clusterName + '\'' + ", group='" + group + '\'' + + ", contextPath='" + contextPath + '\'' + '}'; } } 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 5a5c3e56f..22f7a66bb 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 @@ -48,7 +48,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 static final String INTERNAL_NACOS_CLUSTER = "internal-nacos-cluster"; + private static final String NACOS_CLUSTER = "nacos.cluster"; private final PolarisDiscoveryProperties polarisDiscoveryProperties; @@ -135,7 +135,7 @@ public class PolarisRegistration implements Registration { // put internal-nacos-cluster if necessary String clusterName = nacosContextProperties.getClusterName(); if (StringUtils.isNotBlank(clusterName) && !DEFAULT_CLUSTER.equals(clusterName)) { - instanceMetadata.put(INTERNAL_NACOS_CLUSTER, clusterName); + instanceMetadata.put(NACOS_CLUSTER, clusterName); } instanceMetadata.putAll(staticMetadataManager.getMergedStaticMetadata()); 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 index 3efe7924c..97588194a 100644 --- 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 @@ -19,6 +19,7 @@ package com.tencent.cloud.polaris.extend.nacos; import java.util.List; +import java.util.Map; import java.util.Optional; import com.tencent.polaris.api.config.plugin.DefaultPlugins; @@ -73,11 +74,15 @@ public class NacosContextPropertiesTest { ).findAny(); assertThat(optionalServerConnectorConfig.isPresent()).isTrue(); ServerConnectorConfigImpl serverConnectorConfig = optionalServerConnectorConfig.get(); - String address = String.format("%s:%s@%s", nacosContextProperties.getUsername(), nacosContextProperties.getPassword(), nacosContextProperties.getServerAddr()); if (!CollectionUtils.isEmpty(serverConnectorConfig.getAddresses())) { - assertThat(address.equals(serverConnectorConfig.getAddresses().get(0))).isTrue(); + assertThat(nacosContextProperties.getServerAddr().equals(serverConnectorConfig.getAddresses().get(0))).isTrue(); } assertThat(DefaultPlugins.SERVER_CONNECTOR_NACOS.equals(serverConnectorConfig.getProtocol())).isTrue(); + + Map metadata = serverConnectorConfig.getMetadata(); + assertThat(metadata.get(NacosConfigModifier.USERNAME)).isEqualTo(nacosContextProperties.getUsername()); + assertThat(metadata.get(NacosConfigModifier.PASSWORD)).isEqualTo(nacosContextProperties.getPassword()); + assertThat(metadata.get(NacosConfigModifier.CONTEXT_PATH)).isEqualTo(nacosContextProperties.getContextPath()); } @SpringBootApplication 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 501f7fe8e..20ce66b8b 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 @@ -149,6 +149,6 @@ public class PolarisRegistrationTest { assertThat(metadata).isNotNull(); assertThat(metadata).isNotEmpty(); assertThat(metadata.size()).isEqualTo(4); - assertThat(metadata.get("internal-nacos-cluster")).isEqualTo(clusterName); + assertThat(metadata.get("nacos.cluster")).isEqualTo(clusterName); } } 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 d69ae79ff..52752ef59 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 @@ -24,6 +24,7 @@ spring: prefer-ip-address: true nacos: enabled: true + context-path: /nacos discovery: enabled: true register-enabled: true 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 e633eec59..c36f4ac20 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 @@ -43,6 +43,7 @@ spring: # prefer-ip-address: true # nacos: # enabled: true +# context-path: /nacos # discovery: # enabled: true # register-enabled: true @@ -50,6 +51,7 @@ spring: # server-addr: 127.0.0.1:8848 # username: nacos # password: nacos +# cluster-name: polaris #eureka: # client: # serviceUrl: