feature:multi register support nacos.

pull/693/head
wulingxiao 3 years ago
parent c4a9ad5ade
commit 815bb4ad4f

@ -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<String, String> 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);

@ -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 + '\'' +
'}';
}
}

@ -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());

@ -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<String, String> 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

@ -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);
}
}

@ -24,6 +24,7 @@ spring:
prefer-ip-address: true
nacos:
enabled: true
context-path: /nacos
discovery:
enabled: true
register-enabled: true

@ -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:

Loading…
Cancel
Save