feat: support nacos namespace mapping (#1190)

pull/1196/head
wenxuan70 1 year ago committed by GitHub
parent 5e9b655fd8
commit e34fe66444
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -16,3 +16,4 @@
- [fix:remove bcprov-jdk15on dependency.](https://github.com/Tencent/spring-cloud-tencent/pull/1180) - [fix:remove bcprov-jdk15on dependency.](https://github.com/Tencent/spring-cloud-tencent/pull/1180)
- [feat:support configuration encryption.](https://github.com/Tencent/spring-cloud-tencent/pull/1184) - [feat:support configuration encryption.](https://github.com/Tencent/spring-cloud-tencent/pull/1184)
- [feat:optimize examples.](https://github.com/Tencent/spring-cloud-tencent/pull/1188) - [feat:optimize examples.](https://github.com/Tencent/spring-cloud-tencent/pull/1188)
- [feat: support nacos namespace mapping](https://github.com/Tencent/spring-cloud-tencent/pull/1190)

@ -55,6 +55,14 @@ public class NacosConfigModifier implements PolarisConfigModifier {
* nacos contextPath. * nacos contextPath.
*/ */
public static final String CONTEXT_PATH = "contextPath"; public static final String CONTEXT_PATH = "contextPath";
/**
* nacos namespace.
*/
public static final String NAMESPACE = "namespace";
/**
* nacos group.
*/
public static final String GROUP = "group";
private static final Logger LOGGER = LoggerFactory.getLogger(NacosConfigModifier.class); private static final Logger LOGGER = LoggerFactory.getLogger(NacosConfigModifier.class);
private static final String ID = "nacos"; private static final String ID = "nacos";
private final NacosContextProperties nacosContextProperties; private final NacosContextProperties nacosContextProperties;
@ -115,6 +123,14 @@ public class NacosConfigModifier implements PolarisConfigModifier {
metadata.put(CONTEXT_PATH, nacosContextProperties.getContextPath()); metadata.put(CONTEXT_PATH, nacosContextProperties.getContextPath());
} }
if (StringUtils.isNotBlank(nacosContextProperties.getNamespace())) {
metadata.put(NAMESPACE, nacosContextProperties.getNamespace());
}
if (StringUtils.isNotBlank(nacosContextProperties.getGroup())) {
metadata.put(GROUP, nacosContextProperties.getGroup());
}
configuration.getGlobal().getServerConnectors().add(serverConnectorConfig); configuration.getGlobal().getServerConnectors().add(serverConnectorConfig);
DiscoveryConfigImpl discoveryConfig = new DiscoveryConfigImpl(); DiscoveryConfigImpl discoveryConfig = new DiscoveryConfigImpl();
discoveryConfig.setServerConnectorId(ID); discoveryConfig.setServerConnectorId(ID);

@ -39,6 +39,11 @@ public class NacosContextProperties {
*/ */
public static final String DEFAULT_CLUSTER = "DEFAULT"; public static final String DEFAULT_CLUSTER = "DEFAULT";
/**
* Nacos default namespace name.
*/
public static final String DEFAULT_NAMESPACE = "public";
private boolean enabled = false; private boolean enabled = false;
@Value("${spring.cloud.nacos.discovery.enabled:#{'true'}}") @Value("${spring.cloud.nacos.discovery.enabled:#{'true'}}")
@ -81,6 +86,9 @@ public class NacosContextProperties {
@Value("${spring.cloud.nacos.discovery.group:DEFAULT_GROUP}") @Value("${spring.cloud.nacos.discovery.group:DEFAULT_GROUP}")
private String group = DEFAULT_GROUP; private String group = DEFAULT_GROUP;
@Value("${spring.cloud.nacos.discovery.namespace:public}")
private String namespace = DEFAULT_NAMESPACE;
private String contextPath; private String contextPath;
public boolean isEnabled() { public boolean isEnabled() {
@ -155,6 +163,14 @@ public class NacosContextProperties {
this.contextPath = contextPath; this.contextPath = contextPath;
} }
public String getNamespace() {
return namespace;
}
public void setNamespace(String namespace) {
this.namespace = namespace;
}
@Override @Override
public String toString() { public String toString() {
return "NacosContextProperties{" + return "NacosContextProperties{" +
@ -167,6 +183,7 @@ public class NacosContextProperties {
", clusterName='" + clusterName + '\'' + ", clusterName='" + clusterName + '\'' +
", group='" + group + '\'' + ", group='" + group + '\'' +
", contextPath='" + contextPath + '\'' + ", contextPath='" + contextPath + '\'' +
", namespace='" + namespace + '\'' +
'}'; '}';
} }
} }

@ -91,6 +91,13 @@
"sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties", "sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties",
"defaultValue": "DEFAULT_GROUP" "defaultValue": "DEFAULT_GROUP"
}, },
{
"name": "spring.cloud.nacos.discovery.namespace",
"type": "java.lang.String",
"description": "namespace id for nacos.",
"sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties",
"defaultValue": "public"
},
{ {
"name": "spring.cloud.nacos.discovery.password", "name": "spring.cloud.nacos.discovery.password",
"type": "java.lang.String", "type": "java.lang.String",
@ -123,7 +130,7 @@
"sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties" "sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties"
} }
], ],
"hints" : [ "hints": [
{ {
"name": "spring.cloud.polaris.loadbalancer.strategy", "name": "spring.cloud.polaris.loadbalancer.strategy",
"values": [ "values": [

@ -62,6 +62,7 @@ public class NacosContextPropertiesTest {
assertThat(nacosContextProperties.isDiscoveryEnabled()).isTrue(); assertThat(nacosContextProperties.isDiscoveryEnabled()).isTrue();
assertThat(nacosContextProperties.getGroup()).isNotBlank(); assertThat(nacosContextProperties.getGroup()).isNotBlank();
assertThat(nacosContextProperties.getClusterName()).isNotBlank(); assertThat(nacosContextProperties.getClusterName()).isNotBlank();
assertThat(nacosContextProperties.getNamespace()).isNotBlank();
} }
@Test @Test
@ -85,6 +86,8 @@ public class NacosContextPropertiesTest {
assertThat(metadata.get(NacosConfigModifier.USERNAME)).isEqualTo(nacosContextProperties.getUsername()); assertThat(metadata.get(NacosConfigModifier.USERNAME)).isEqualTo(nacosContextProperties.getUsername());
assertThat(metadata.get(NacosConfigModifier.PASSWORD)).isEqualTo(nacosContextProperties.getPassword()); assertThat(metadata.get(NacosConfigModifier.PASSWORD)).isEqualTo(nacosContextProperties.getPassword());
assertThat(metadata.get(NacosConfigModifier.CONTEXT_PATH)).isEqualTo(nacosContextProperties.getContextPath()); assertThat(metadata.get(NacosConfigModifier.CONTEXT_PATH)).isEqualTo(nacosContextProperties.getContextPath());
assertThat(metadata.get(NacosConfigModifier.NAMESPACE)).isEqualTo(nacosContextProperties.getNamespace());
assertThat(metadata.get(NacosConfigModifier.GROUP)).isEqualTo(nacosContextProperties.getGroup());
} }
@SpringBootApplication @SpringBootApplication

@ -88,7 +88,7 @@ public class MetadataContext {
throw new RuntimeException("namespace should not be blank. please configure spring.cloud.polaris.namespace or " throw new RuntimeException("namespace should not be blank. please configure spring.cloud.polaris.namespace or "
+ "spring.cloud.polaris.discovery.namespace"); + "spring.cloud.polaris.discovery.namespace");
} }
namespace = DiscoveryUtil.rewriteNamespace(namespace);
LOCAL_NAMESPACE = namespace; LOCAL_NAMESPACE = namespace;
String serviceName = ApplicationContextAwareUtils String serviceName = ApplicationContextAwareUtils

@ -32,6 +32,8 @@ public final class DiscoveryUtil {
private static String NACOS_GROUP; private static String NACOS_GROUP;
private static String NACOS_NAMESPACE;
private static final Object MUTEX = new Object(); private static final Object MUTEX = new Object();
private static boolean INITIALIZE = false; private static boolean INITIALIZE = false;
@ -62,6 +64,29 @@ public final class DiscoveryUtil {
return serviceId; return serviceId;
} }
/**
* rewrite namespace when open double registry and discovery by nacos and polaris.
*
* @param namespace namespace
* @return new namespace
*/
public static String rewriteNamespace(String namespace) {
init();
if (Boolean.parseBoolean(ENABLE_NACOS)) {
boolean rewrite = false;
if (Boolean.parseBoolean(ENABLE_NACOS_REGISTRY) && Boolean.parseBoolean(ENABLE_POLARIS_DISCOVERY)) {
rewrite = true;
}
if (Boolean.parseBoolean(ENABLE_NACOS_DISCOVERY) || Boolean.parseBoolean(ENABLE_POLARIS_DISCOVERY)) {
rewrite = true;
}
if (rewrite) {
namespace = NACOS_NAMESPACE;
}
}
return namespace;
}
private static void init() { private static void init() {
if (INITIALIZE) { if (INITIALIZE) {
return; return;
@ -75,6 +100,7 @@ public final class DiscoveryUtil {
ENABLE_NACOS_REGISTRY = ApplicationContextAwareUtils.getProperties("spring.cloud.nacos.discovery.register-enabled"); ENABLE_NACOS_REGISTRY = ApplicationContextAwareUtils.getProperties("spring.cloud.nacos.discovery.register-enabled");
ENABLE_POLARIS_DISCOVERY = ApplicationContextAwareUtils.getProperties("spring.cloud.polaris.discovery.enabled"); ENABLE_POLARIS_DISCOVERY = ApplicationContextAwareUtils.getProperties("spring.cloud.polaris.discovery.enabled");
NACOS_GROUP = ApplicationContextAwareUtils.getProperties("spring.cloud.nacos.discovery.group", "DEFAULT_GROUP"); NACOS_GROUP = ApplicationContextAwareUtils.getProperties("spring.cloud.nacos.discovery.group", "DEFAULT_GROUP");
NACOS_NAMESPACE = ApplicationContextAwareUtils.getProperties("spring.cloud.nacos.discovery.namespace", "public");
INITIALIZE = true; INITIALIZE = true;
} }
} }

Loading…
Cancel
Save