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.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import com.tencent.cloud.common.constant.ContextConstant; 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.consumer.DiscoveryConfigImpl;
import com.tencent.polaris.factory.config.global.ServerConnectorConfigImpl; import com.tencent.polaris.factory.config.global.ServerConnectorConfigImpl;
import com.tencent.polaris.factory.config.provider.RegisterConfigImpl; import com.tencent.polaris.factory.config.provider.RegisterConfigImpl;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -39,7 +41,18 @@ import org.springframework.util.CollectionUtils;
*/ */
public class NacosConfigModifier implements PolarisConfigModifier { public class NacosConfigModifier implements PolarisConfigModifier {
private static final String ID = "nacos"; 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; private final NacosContextProperties nacosContextProperties;
@ -61,11 +74,27 @@ public class NacosConfigModifier implements PolarisConfigModifier {
} }
ServerConnectorConfigImpl serverConnectorConfig = new ServerConnectorConfigImpl(); ServerConnectorConfigImpl serverConnectorConfig = new ServerConnectorConfigImpl();
serverConnectorConfig.setId(ID); serverConnectorConfig.setId(ID);
// Nacos Address URI: nacos:nacos@127.0.0.1:8848 if (StringUtils.isBlank(nacosContextProperties.getServerAddr())) {
String address = String.format(ADDRESS_FORMAT, nacosContextProperties.getUsername(), nacosContextProperties.getPassword(), nacosContextProperties.getServerAddr()); throw new IllegalArgumentException("nacos server addr must not be empty, please set it by" +
"spring.cloud.nacos.discovery.server-addr");
}
serverConnectorConfig.setAddresses( serverConnectorConfig.setAddresses(
Collections.singletonList(address)); Collections.singletonList(nacosContextProperties.getServerAddr()));
serverConnectorConfig.setProtocol(DefaultPlugins.SERVER_CONNECTOR_NACOS); 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); configuration.getGlobal().getServerConnectors().add(serverConnectorConfig);
DiscoveryConfigImpl discoveryConfig = new DiscoveryConfigImpl(); DiscoveryConfigImpl discoveryConfig = new DiscoveryConfigImpl();
discoveryConfig.setServerConnectorId(ID); discoveryConfig.setServerConnectorId(ID);

@ -81,6 +81,8 @@ 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;
private String contextPath;
public boolean isEnabled() { public boolean isEnabled() {
return enabled; return enabled;
} }
@ -145,6 +147,14 @@ public class NacosContextProperties {
this.group = group; this.group = group;
} }
public String getContextPath() {
return contextPath;
}
public void setContextPath(String contextPath) {
this.contextPath = contextPath;
}
@Override @Override
public String toString() { public String toString() {
return "NacosContextProperties{" + return "NacosContextProperties{" +
@ -156,6 +166,7 @@ public class NacosContextProperties {
", password='" + password + '\'' + ", password='" + password + '\'' +
", clusterName='" + clusterName + '\'' + ", clusterName='" + clusterName + '\'' +
", group='" + group + '\'' + ", 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_IP = "internal-ip";
private static final String METADATA_KEY_ADDRESS = "internal-address"; 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 static final String NACOS_CLUSTER = "nacos.cluster";
private final PolarisDiscoveryProperties polarisDiscoveryProperties; private final PolarisDiscoveryProperties polarisDiscoveryProperties;
@ -135,7 +135,7 @@ public class PolarisRegistration implements Registration {
// put internal-nacos-cluster if necessary // put internal-nacos-cluster if necessary
String clusterName = nacosContextProperties.getClusterName(); String clusterName = nacosContextProperties.getClusterName();
if (StringUtils.isNotBlank(clusterName) && !DEFAULT_CLUSTER.equals(clusterName)) { if (StringUtils.isNotBlank(clusterName) && !DEFAULT_CLUSTER.equals(clusterName)) {
instanceMetadata.put(INTERNAL_NACOS_CLUSTER, clusterName); instanceMetadata.put(NACOS_CLUSTER, clusterName);
} }
instanceMetadata.putAll(staticMetadataManager.getMergedStaticMetadata()); instanceMetadata.putAll(staticMetadataManager.getMergedStaticMetadata());

@ -19,6 +19,7 @@
package com.tencent.cloud.polaris.extend.nacos; package com.tencent.cloud.polaris.extend.nacos;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import com.tencent.polaris.api.config.plugin.DefaultPlugins; import com.tencent.polaris.api.config.plugin.DefaultPlugins;
@ -73,11 +74,15 @@ public class NacosContextPropertiesTest {
).findAny(); ).findAny();
assertThat(optionalServerConnectorConfig.isPresent()).isTrue(); assertThat(optionalServerConnectorConfig.isPresent()).isTrue();
ServerConnectorConfigImpl serverConnectorConfig = optionalServerConnectorConfig.get(); ServerConnectorConfigImpl serverConnectorConfig = optionalServerConnectorConfig.get();
String address = String.format("%s:%s@%s", nacosContextProperties.getUsername(), nacosContextProperties.getPassword(), nacosContextProperties.getServerAddr());
if (!CollectionUtils.isEmpty(serverConnectorConfig.getAddresses())) { 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(); 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 @SpringBootApplication

@ -149,6 +149,6 @@ public class PolarisRegistrationTest {
assertThat(metadata).isNotNull(); assertThat(metadata).isNotNull();
assertThat(metadata).isNotEmpty(); assertThat(metadata).isNotEmpty();
assertThat(metadata.size()).isEqualTo(4); 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 prefer-ip-address: true
nacos: nacos:
enabled: true enabled: true
context-path: /nacos
discovery: discovery:
enabled: true enabled: true
register-enabled: true register-enabled: true

@ -43,6 +43,7 @@ spring:
# prefer-ip-address: true # prefer-ip-address: true
# nacos: # nacos:
# enabled: true # enabled: true
# context-path: /nacos
# discovery: # discovery:
# enabled: true # enabled: true
# register-enabled: true # register-enabled: true
@ -50,6 +51,7 @@ spring:
# server-addr: 127.0.0.1:8848 # server-addr: 127.0.0.1:8848
# username: nacos # username: nacos
# password: nacos # password: nacos
# cluster-name: polaris
#eureka: #eureka:
# client: # client:
# serviceUrl: # serviceUrl:

Loading…
Cancel
Save