From 0ee87017f4f9aedd938e713b9452211b7cbf5434 Mon Sep 17 00:00:00 2001 From: wulingxiao <1251605638@qqcom> Date: Thu, 3 Nov 2022 18:20:11 +0800 Subject: [PATCH] feature:multi register support nacos. --- .../extend/nacos/NacosConfigModifier.java | 10 --------- .../extend/nacos/NacosContextProperties.java | 9 ++++++-- .../polaris/registry/PolarisRegistration.java | 16 +++++++++++--- .../nacos/NacosContextPropertiesTest.java | 21 +++++++++++-------- .../registry/PolarisRegistrationTest.java | 15 +++++++++++-- 5 files changed, 45 insertions(+), 26 deletions(-) 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 e91b69dcc..68f799cc6 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,7 +20,6 @@ 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; @@ -30,7 +29,6 @@ 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; @@ -42,7 +40,6 @@ 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"; - private static final String INTERNAL_NACOS_CLUSTER = "internal-nacos-cluster"; private final NacosContextProperties nacosContextProperties; @@ -55,7 +52,6 @@ public class NacosConfigModifier implements PolarisConfigModifier { if (Objects.isNull(nacosContextProperties) || !nacosContextProperties.isEnabled()) { return; } - if (CollectionUtils.isEmpty(configuration.getGlobal().getServerConnectors())) { configuration.getGlobal().setServerConnectors(new ArrayList<>()); } @@ -70,12 +66,6 @@ public class NacosConfigModifier implements PolarisConfigModifier { serverConnectorConfig.setAddresses( Collections.singletonList(address)); serverConnectorConfig.setProtocol(DefaultPlugins.SERVER_CONNECTOR_NACOS); - Map metadata = serverConnectorConfig.getMetadata(); - // set internal-nacos-cluster if necessary - String clusterName = nacosContextProperties.getClusterName(); - if (StringUtils.isNotBlank(clusterName)) { - metadata.put(INTERNAL_NACOS_CLUSTER, clusterName); - } 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 a7ca6cc06..4c0198066 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 @@ -34,6 +34,11 @@ public class NacosContextProperties { */ public static final String DEFAULT_GROUP = "DEFAULT_GROUP"; + /** + * Nacos default cluster name. + */ + public static final String DEFAULT_CLUSTER = "DEFAULT"; + private boolean enabled = false; @Value("${spring.cloud.nacos.discovery.enabled:#{'true'}}") @@ -67,8 +72,8 @@ public class NacosContextProperties { /** * cluster name for nacos . */ - @Value("${spring.cloud.nacos.discovery.cluster-name:}") - private String clusterName; + @Value("${spring.cloud.nacos.discovery.cluster-name:DEFAULT}") + private String clusterName = DEFAULT_CLUSTER; /** * group name for nacos. 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 f28a6e23c..5a5c3e56f 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 @@ -35,6 +35,7 @@ import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; +import static com.tencent.cloud.polaris.extend.nacos.NacosContextProperties.DEFAULT_CLUSTER; import static com.tencent.cloud.polaris.extend.nacos.NacosContextProperties.DEFAULT_GROUP; /** @@ -46,7 +47,8 @@ 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 GROUP_SERVER_ID_FORMAT = "%s__%s"; + private static final String INTERNAL_NACOS_CLUSTER = "internal-nacos-cluster"; private final PolarisDiscoveryProperties polarisDiscoveryProperties; @@ -130,6 +132,12 @@ public class PolarisRegistration implements Registration { instanceMetadata.put(METADATA_KEY_IP, host); instanceMetadata.put(METADATA_KEY_ADDRESS, host + ":" + polarisDiscoveryProperties.getPort()); + // 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.putAll(staticMetadataManager.getMergedStaticMetadata()); this.metadata = instanceMetadata; @@ -155,12 +163,14 @@ public class PolarisRegistration implements Registration { boolean registerEnabled = false; if (null != polarisDiscoveryProperties) { - registerEnabled |= polarisDiscoveryProperties.isRegisterEnabled(); + registerEnabled = polarisDiscoveryProperties.isRegisterEnabled(); } if (null != consulContextProperties && consulContextProperties.isEnabled()) { registerEnabled |= consulContextProperties.isRegister(); } - + if (null != nacosContextProperties && nacosContextProperties.isEnabled()) { + registerEnabled |= nacosContextProperties.isRegisterEnabled(); + } return registerEnabled; } 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 3124490ce..3efe7924c 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,8 +19,9 @@ 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; import com.tencent.polaris.client.api.SDKContext; import com.tencent.polaris.factory.config.global.ServerConnectorConfigImpl; import org.junit.Test; @@ -31,6 +32,7 @@ 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 org.springframework.util.CollectionUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -66,15 +68,16 @@ public class NacosContextPropertiesTest { 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(); - } + Optional optionalServerConnectorConfig = serverConnectorConfigs.stream().filter( + item -> "nacos".equals(item.getId()) + ).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(metadata).isNotNull(); - assertThat(metadata.get("internal-nacos-cluster")).isEqualTo("polaris"); - + assertThat(DefaultPlugins.SERVER_CONNECTOR_NACOS.equals(serverConnectorConfig.getProtocol())).isTrue(); } @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 5b555a499..501f7fe8e 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 @@ -135,9 +135,20 @@ public class PolarisRegistrationTest { @Test public void testGetNacosServiceId() { String groupName = "group"; - String format = "%s_%s"; - when(nacosContextProperties.getGroup()).thenReturn("group"); + String format = "%s__%s"; + when(nacosContextProperties.getGroup()).thenReturn(groupName); String serviceId = polarisRegistration.getServiceId(); assertThat(String.format(format, groupName, SERVICE_PROVIDER).equals(serviceId)); } + + @Test + public void testGetNacosMetadata() { + String clusterName = "cluster"; + when(nacosContextProperties.getClusterName()).thenReturn(clusterName); + Map metadata = polarisRegistration.getMetadata(); + assertThat(metadata).isNotNull(); + assertThat(metadata).isNotEmpty(); + assertThat(metadata.size()).isEqualTo(4); + assertThat(metadata.get("internal-nacos-cluster")).isEqualTo(clusterName); + } }