From dd5725a16d33d452a1a211a2c6f082bff3813337 Mon Sep 17 00:00:00 2001 From: Haotian Zhang <928016560@qq.com> Date: Mon, 9 Jun 2025 15:43:38 +0800 Subject: [PATCH] feat:support namespace exports configuration if not created. --- CHANGELOG.md | 1 + .../polaris/PolarisDiscoveryProperties.java | 14 ++++++ .../NamespaceRegistrationCustomizer.java | 43 +++++++++++++++++++ ...larisServiceRegistryAutoConfiguration.java | 5 +++ ...itional-spring-configuration-metadata.json | 5 +++ .../impl/DefaultInstanceMetadataProvider.java | 21 +++++++-- ...olarisContextEnvironmentPostProcessor.java | 6 +++ 7 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/NamespaceRegistrationCustomizer.java diff --git a/CHANGELOG.md b/CHANGELOG.md index b2a403006..c6f5f252a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,3 +7,4 @@ - [feat:support ipv6.](https://github.com/Tencent/spring-cloud-tencent/pull/1592) - [feat:support config all recover enabled.](https://github.com/Tencent/spring-cloud-tencent/pull/1593) - [feat:support stat reporting path aggregation.](https://github.com/Tencent/spring-cloud-tencent/pull/1602) +- [feat:support namespace exports configuration if not created.](https://github.com/Tencent/spring-cloud-tencent/pull/1611) diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/PolarisDiscoveryProperties.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/PolarisDiscoveryProperties.java index f0f0ce597..fead815b3 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/PolarisDiscoveryProperties.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/PolarisDiscoveryProperties.java @@ -122,6 +122,11 @@ public class PolarisDiscoveryProperties { */ private Boolean allRecoverEnabled = true; + /** + * namespace exports if not created. + */ + private String namespaceExports; + public String getInstanceId() { return instanceId; } @@ -265,6 +270,14 @@ public class PolarisDiscoveryProperties { this.registerEnabled = registerEnabled; } + public String getNamespaceExports() { + return namespaceExports; + } + + public void setNamespaceExports(String namespaceExports) { + this.namespaceExports = namespaceExports; + } + @Override public String toString() { return "PolarisDiscoveryProperties{" + @@ -284,6 +297,7 @@ public class PolarisDiscoveryProperties { ", zeroProtectionNeedTestConnectivity=" + zeroProtectionNeedTestConnectivity + ", preferIpv6=" + preferIpv6 + ", allRecoverEnabled=" + allRecoverEnabled + + ", namespaceExports='" + namespaceExports + '\'' + '}'; } } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/NamespaceRegistrationCustomizer.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/NamespaceRegistrationCustomizer.java new file mode 100644 index 000000000..834c1637f --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/NamespaceRegistrationCustomizer.java @@ -0,0 +1,43 @@ +/* + * Tencent is pleased to support the open source community by making spring-cloud-tencent available. + * + * Copyright (C) 2021 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.registry; + +import com.tencent.cloud.polaris.PolarisDiscoveryProperties; +import com.tencent.polaris.api.utils.StringUtils; + +/** + * 服务注册时端口相关逻辑. + * + * @author Haotian Zhang + */ +public class NamespaceRegistrationCustomizer implements PolarisRegistrationCustomizer { + + private final PolarisDiscoveryProperties polarisDiscoveryProperties; + + public NamespaceRegistrationCustomizer(PolarisDiscoveryProperties polarisDiscoveryProperties) { + this.polarisDiscoveryProperties = polarisDiscoveryProperties; + } + + @Override + public void customize(PolarisRegistration registration) { + String namespaceExports = polarisDiscoveryProperties.getNamespaceExports(); + if (StringUtils.isNotBlank(namespaceExports)) { + registration.getMetadata().put("POLARIS_INTERNAL_NAMESPACE_EXPORTS", namespaceExports); + } + } +} 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 4a4be9538..624811ca0 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 @@ -95,4 +95,9 @@ public class PolarisServiceRegistryAutoConfiguration { public PolarisWebApplicationCheck polarisWebApplicationCheck() { return new PolarisWebApplicationCheck(); } + + @Bean + public NamespaceRegistrationCustomizer namespaceRegistrationCustomizer(PolarisDiscoveryProperties polarisDiscoveryProperties) { + return new NamespaceRegistrationCustomizer(polarisDiscoveryProperties); + } } 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 aa4fe5f87..16bf023ec 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 @@ -90,6 +90,11 @@ "defaultValue": true, "description": "is all recover enable. Default: true." }, + { + "name": "spring.cloud.polaris.discovery.namespace-exports", + "type": "java.lang.String", + "description": "namespace exports if not created." + }, { "name": "spring.cloud.polaris.discovery.eager-load.enabled", "type": "java.lang.Boolean", diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java index 5a4b1fe4b..b5829c81e 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java @@ -25,6 +25,9 @@ import java.util.Set; import com.tencent.cloud.common.spi.InstanceMetadataProvider; import com.tencent.cloud.common.util.ApplicationContextAwareUtils; +import com.tencent.cloud.common.util.inet.PolarisInetUtils; +import com.tencent.polaris.api.utils.StringUtils; +import com.tencent.polaris.metadata.core.constant.MetadataConstants; import static com.tencent.cloud.common.constant.MetadataConstant.DefaultMetadata.DEFAULT_METADATA_SOURCE_SERVICE_NAME; import static com.tencent.cloud.common.constant.MetadataConstant.DefaultMetadata.DEFAULT_METADATA_SOURCE_SERVICE_NAMESPACE; @@ -48,10 +51,20 @@ public class DefaultInstanceMetadataProvider implements InstanceMetadataProvider @Override public Map getMetadata() { - return new HashMap() {{ - put(DEFAULT_METADATA_SOURCE_SERVICE_NAMESPACE, LOCAL_NAMESPACE); - put(DEFAULT_METADATA_SOURCE_SERVICE_NAME, LOCAL_SERVICE); - }}; + HashMap defaultInstanceMetadata = new HashMap<>(); + defaultInstanceMetadata.put(DEFAULT_METADATA_SOURCE_SERVICE_NAMESPACE, LOCAL_NAMESPACE); + defaultInstanceMetadata.put(DEFAULT_METADATA_SOURCE_SERVICE_NAME, LOCAL_SERVICE); + + String ipv4Address = PolarisInetUtils.getIpString(false); + if (StringUtils.isNotBlank(ipv4Address)) { + defaultInstanceMetadata.put(MetadataConstants.ADDRESS_IPV4, ipv4Address); + } + String ipv6Address = PolarisInetUtils.getIpString(true); + if (StringUtils.isNotBlank(ipv6Address)) { + defaultInstanceMetadata.put(MetadataConstants.ADDRESS_IPV6, ipv6Address); + } + + return defaultInstanceMetadata; } @Override diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextEnvironmentPostProcessor.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextEnvironmentPostProcessor.java index f5622a210..63b7904ff 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextEnvironmentPostProcessor.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextEnvironmentPostProcessor.java @@ -100,6 +100,12 @@ public final class PolarisContextEnvironmentPostProcessor implements Environment polarisEnvProperties.put("spring.cloud.tencent.metadata.content.zone", zone); } + // global namespace enabled + String globalNamespaceEnabled = environment.getProperty("global_namespace_enabled"); + if (StringUtils.isNotBlank(globalNamespaceEnabled) && StringUtils.equals("true", globalNamespaceEnabled)) { + polarisEnvProperties.put("spring.cloud.polaris.discovery.namespace-exports", "*"); + } + MapPropertySource propertySource = new MapPropertySource("polaris-env-properties", polarisEnvProperties); environment.getPropertySources().addFirst(propertySource); }