From 3cc63c58e09b99e69281e3b54bb2b785ce06d20e Mon Sep 17 00:00:00 2001 From: fishtailfu Date: Wed, 27 Aug 2025 17:07:17 +0800 Subject: [PATCH] fix: refract instance metadata adding --- CHANGELOG.md | 3 +- .../extend/nacos/NacosConfigModifier.java | 2 +- .../extend/nacos/NacosContextProperties.java | 14 +---- .../polaris/registry/PolarisRegistration.java | 15 +----- ...cosDiscoveryRegistryAutoConfiguration.java | 37 +++++++++++++ .../NacosPolarisRegistrationCustomizer.java | 53 +++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../nacos/NacosContextPropertiesTest.java | 1 - .../registry/PolarisRegistrationTest.java | 1 - 9 files changed, 97 insertions(+), 30 deletions(-) create mode 100644 spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/nacos/NacosDiscoveryRegistryAutoConfiguration.java create mode 100644 spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/nacos/NacosPolarisRegistrationCustomizer.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d2a38260..04379955d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,4 +22,5 @@ - [feat: support config ratelimit addresses and remote task interval.](https://github.com/Tencent/spring-cloud-tencent/pull/1679) - [docs:optimize tsf example.](https://github.com/Tencent/spring-cloud-tencent/pull/1710) - [feat:support TSF certificate manager.](https://github.com/Tencent/spring-cloud-tencent/pull/1715) -- [feat:support tsf unit.](https://github.com/Tencent/spring-cloud-tencent/pull/1681) \ No newline at end of file +- [feat:support tsf unit.](https://github.com/Tencent/spring-cloud-tencent/pull/1681) +- [feat: support service registry and discovery with Polaris and Nacos](https://github.com/Tencent/spring-cloud-tencent/pull/1718) 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 a08528fae..e29bb7560 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 @@ -62,7 +62,7 @@ public class NacosConfigModifier implements PolarisConfigModifier { @Override public void modify(ConfigurationImpl configuration) { - if (Objects.isNull(nacosContextProperties) || !nacosContextProperties.isEnabled()) { + if (Objects.isNull(nacosContextProperties) || !nacosContextProperties.isDiscoveryEnabled()) { return; } if (CollectionUtils.isEmpty(configuration.getGlobal().getServerConnectors())) { 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 a0a771e8d..778043d8b 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 @@ -43,9 +43,7 @@ public class NacosContextProperties { */ public static final String DEFAULT_NAMESPACE = "public"; - private boolean enabled = false; - - @Value("${spring.cloud.nacos.discovery.enabled:#{'true'}}") + @Value("${spring.cloud.nacos.discovery.enabled:#{'false'}}") private boolean discoveryEnabled; /** @@ -105,13 +103,6 @@ public class NacosContextProperties { private String contextPath; - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } public boolean isRegisterEnabled() { return registerEnabled; @@ -211,8 +202,7 @@ public class NacosContextProperties { @Override public String toString() { return "NacosContextProperties{" + - "enabled=" + enabled + - ", discoveryEnabled=" + discoveryEnabled + + "discoveryEnabled=" + discoveryEnabled + ", registerEnabled=" + registerEnabled + ", serverAddr='" + serverAddr + '\'' + ", ephemeral=" + ephemeral + 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 3433998f9..b468c5459 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 @@ -102,19 +102,6 @@ public class PolarisRegistration implements Registration { // generate metadata if (CollectionUtils.isEmpty(metadata)) { Map instanceMetadata = new HashMap<>(); - - // put internal-nacos-cluster if necessary - if (Objects.nonNull(nacosContextProperties)) { - String clusterName = nacosContextProperties.getClusterName(); - if (StringUtils.isNotBlank(clusterName) && !DEFAULT_CLUSTER.equals(clusterName)) { - instanceMetadata.put(NACOS_CLUSTER, clusterName); - } - String groupName = nacosContextProperties.getGroup(); - if (StringUtils.isNotBlank(groupName) && !DEFAULT_GROUP.equals(groupName)) { - instanceMetadata.put(NACOS_GROUP, groupName); - } - } - instanceMetadata.putAll(staticMetadataManager.getMergedStaticMetadata()); this.metadata = instanceMetadata; @@ -129,7 +116,7 @@ public class PolarisRegistration implements Registration { if (null != consulDiscoveryProperties) { registerEnabled |= consulDiscoveryProperties.isRegister(); } - if (null != nacosContextProperties && nacosContextProperties.isEnabled()) { + if (null != nacosContextProperties && nacosContextProperties.isDiscoveryEnabled()) { registerEnabled |= nacosContextProperties.isRegisterEnabled(); } } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/nacos/NacosDiscoveryRegistryAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/nacos/NacosDiscoveryRegistryAutoConfiguration.java new file mode 100644 index 000000000..d0ced7481 --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/nacos/NacosDiscoveryRegistryAutoConfiguration.java @@ -0,0 +1,37 @@ +/* + * Tencent is pleased to support the open source community by making spring-cloud-tencent available. + * + * Copyright (C) 2021 Tencent. 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.registry.nacos; + +import com.tencent.cloud.polaris.extend.nacos.NacosContextProperties; +import com.tencent.cloud.polaris.registry.PolarisServiceRegistryAutoConfiguration; + +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@AutoConfigureBefore(PolarisServiceRegistryAutoConfiguration.class) +public class NacosDiscoveryRegistryAutoConfiguration { + @Bean + @ConditionalOnMissingBean + public NacosPolarisRegistrationCustomizer nacosPolarisRegistrationCustomizer( + NacosContextProperties nacosContextProperties) { + return new NacosPolarisRegistrationCustomizer(nacosContextProperties); + } +} diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/nacos/NacosPolarisRegistrationCustomizer.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/nacos/NacosPolarisRegistrationCustomizer.java new file mode 100644 index 000000000..8bdf9de4b --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/nacos/NacosPolarisRegistrationCustomizer.java @@ -0,0 +1,53 @@ +/* + * Tencent is pleased to support the open source community by making spring-cloud-tencent available. + * + * Copyright (C) 2021 Tencent. 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.registry.nacos; + +import java.util.Map; +import java.util.Objects; + +import com.tencent.cloud.polaris.extend.nacos.NacosContextProperties; +import com.tencent.cloud.polaris.registry.PolarisRegistration; +import com.tencent.cloud.polaris.registry.PolarisRegistrationCustomizer; +import com.tencent.polaris.api.utils.StringUtils; + +import static com.tencent.cloud.polaris.extend.nacos.NacosContextProperties.DEFAULT_CLUSTER; +import static com.tencent.cloud.polaris.extend.nacos.NacosContextProperties.DEFAULT_GROUP; +import static com.tencent.polaris.plugins.connector.common.constant.NacosConstant.MetadataMapKey.NACOS_CLUSTER_KEY; +import static com.tencent.polaris.plugins.connector.common.constant.NacosConstant.MetadataMapKey.NACOS_GROUP_KEY; + +public class NacosPolarisRegistrationCustomizer implements PolarisRegistrationCustomizer { + NacosContextProperties nacosContextProperties; + public NacosPolarisRegistrationCustomizer(NacosContextProperties nacosContextProperties) { + this.nacosContextProperties = nacosContextProperties; + } + @Override + public void customize(PolarisRegistration registration) { + // put internal-nacos-cluster if necessary + Map instanceMetadata = registration.getMetadata(); + if (Objects.nonNull(nacosContextProperties)) { + String clusterName = nacosContextProperties.getClusterName(); + if (StringUtils.isNotBlank(clusterName) && !DEFAULT_CLUSTER.equals(clusterName)) { + instanceMetadata.put(NACOS_CLUSTER_KEY, clusterName); + } + String groupName = nacosContextProperties.getGroup(); + if (StringUtils.isNotBlank(groupName) && !DEFAULT_GROUP.equals(groupName)) { + instanceMetadata.put(NACOS_GROUP_KEY, groupName); + } + } + } +} diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index d252469f9..53390a7dd 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -6,3 +6,4 @@ com.tencent.cloud.polaris.loadbalancer.PolarisLoadBalancerAutoConfiguration com.tencent.cloud.polaris.loadbalancer.PolarisLoadBalancerPropertiesAutoConfiguration com.tencent.cloud.polaris.registry.tsf.TsfDiscoveryRegistryAutoConfiguration com.tencent.cloud.polaris.eager.config.PolarisEagerLoadAutoConfiguration +com.tencent.cloud.polaris.registry.nacos.NacosDiscoveryRegistryAutoConfiguration 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 b5f75278e..4449279b7 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 @@ -61,7 +61,6 @@ public class NacosContextPropertiesTest { @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(); 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 807537c54..7c91a8ded 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 @@ -82,7 +82,6 @@ public class PolarisRegistrationTest { // mock NacosContextProperties nacosContextProperties = mock(NacosContextProperties.class); - doReturn(true).when(nacosContextProperties).isEnabled(); doReturn(true).when(nacosContextProperties).isRegisterEnabled(); doReturn("/").when(nacosContextProperties).getContextPath(); doReturn("cluster").when(nacosContextProperties).getClusterName();