feature:multi register support nacos.

pull/693/head
wulingxiao 3 years ago
parent 42331ac626
commit 0ee87017f4

@ -20,7 +20,6 @@ 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;
@ -30,7 +29,6 @@ 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;
@ -42,7 +40,6 @@ 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";
private static final String INTERNAL_NACOS_CLUSTER = "internal-nacos-cluster";
private final NacosContextProperties nacosContextProperties;
@ -55,7 +52,6 @@ public class NacosConfigModifier implements PolarisConfigModifier {
if (Objects.isNull(nacosContextProperties) || !nacosContextProperties.isEnabled()) {
return;
}
if (CollectionUtils.isEmpty(configuration.getGlobal().getServerConnectors())) {
configuration.getGlobal().setServerConnectors(new ArrayList<>());
}
@ -70,12 +66,6 @@ public class NacosConfigModifier implements PolarisConfigModifier {
serverConnectorConfig.setAddresses(
Collections.singletonList(address));
serverConnectorConfig.setProtocol(DefaultPlugins.SERVER_CONNECTOR_NACOS);
Map<String, String> metadata = serverConnectorConfig.getMetadata();
// set internal-nacos-cluster if necessary
String clusterName = nacosContextProperties.getClusterName();
if (StringUtils.isNotBlank(clusterName)) {
metadata.put(INTERNAL_NACOS_CLUSTER, clusterName);
}
configuration.getGlobal().getServerConnectors().add(serverConnectorConfig);
DiscoveryConfigImpl discoveryConfig = new DiscoveryConfigImpl();
discoveryConfig.setServerConnectorId(ID);

@ -34,6 +34,11 @@ public class NacosContextProperties {
*/
public static final String DEFAULT_GROUP = "DEFAULT_GROUP";
/**
* Nacos default cluster name.
*/
public static final String DEFAULT_CLUSTER = "DEFAULT";
private boolean enabled = false;
@Value("${spring.cloud.nacos.discovery.enabled:#{'true'}}")
@ -67,8 +72,8 @@ public class NacosContextProperties {
/**
* cluster name for nacos .
*/
@Value("${spring.cloud.nacos.discovery.cluster-name:}")
private String clusterName;
@Value("${spring.cloud.nacos.discovery.cluster-name:DEFAULT}")
private String clusterName = DEFAULT_CLUSTER;
/**
* group name for nacos.

@ -35,6 +35,7 @@ import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.lang.Nullable;
import org.springframework.util.CollectionUtils;
import static com.tencent.cloud.polaris.extend.nacos.NacosContextProperties.DEFAULT_CLUSTER;
import static com.tencent.cloud.polaris.extend.nacos.NacosContextProperties.DEFAULT_GROUP;
/**
@ -46,7 +47,8 @@ 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 GROUP_SERVER_ID_FORMAT = "%s__%s";
private static final String INTERNAL_NACOS_CLUSTER = "internal-nacos-cluster";
private final PolarisDiscoveryProperties polarisDiscoveryProperties;
@ -130,6 +132,12 @@ public class PolarisRegistration implements Registration {
instanceMetadata.put(METADATA_KEY_IP, host);
instanceMetadata.put(METADATA_KEY_ADDRESS, host + ":" + polarisDiscoveryProperties.getPort());
// 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.putAll(staticMetadataManager.getMergedStaticMetadata());
this.metadata = instanceMetadata;
@ -155,12 +163,14 @@ public class PolarisRegistration implements Registration {
boolean registerEnabled = false;
if (null != polarisDiscoveryProperties) {
registerEnabled |= polarisDiscoveryProperties.isRegisterEnabled();
registerEnabled = polarisDiscoveryProperties.isRegisterEnabled();
}
if (null != consulContextProperties && consulContextProperties.isEnabled()) {
registerEnabled |= consulContextProperties.isRegister();
}
if (null != nacosContextProperties && nacosContextProperties.isEnabled()) {
registerEnabled |= nacosContextProperties.isRegisterEnabled();
}
return registerEnabled;
}

@ -19,8 +19,9 @@
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;
import com.tencent.polaris.client.api.SDKContext;
import com.tencent.polaris.factory.config.global.ServerConnectorConfigImpl;
import org.junit.Test;
@ -31,6 +32,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.CollectionUtils;
import static org.assertj.core.api.Assertions.assertThat;
@ -66,15 +68,16 @@ public class NacosContextPropertiesTest {
assertThat(sdkContext).isNotNull();
com.tencent.polaris.api.config.Configuration configuration = sdkContext.getConfig();
List<ServerConnectorConfigImpl> serverConnectorConfigs = configuration.getGlobal().getServerConnectors();
Map<String, String> metadata = null;
for (ServerConnectorConfigImpl serverConnectorConfig : serverConnectorConfigs) {
if (serverConnectorConfig.getId().equals("nacos")) {
metadata = serverConnectorConfig.getMetadata();
}
Optional<ServerConnectorConfigImpl> optionalServerConnectorConfig = serverConnectorConfigs.stream().filter(
item -> "nacos".equals(item.getId())
).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(metadata).isNotNull();
assertThat(metadata.get("internal-nacos-cluster")).isEqualTo("polaris");
assertThat(DefaultPlugins.SERVER_CONNECTOR_NACOS.equals(serverConnectorConfig.getProtocol())).isTrue();
}
@SpringBootApplication

@ -135,9 +135,20 @@ public class PolarisRegistrationTest {
@Test
public void testGetNacosServiceId() {
String groupName = "group";
String format = "%s_%s";
when(nacosContextProperties.getGroup()).thenReturn("group");
String format = "%s__%s";
when(nacosContextProperties.getGroup()).thenReturn(groupName);
String serviceId = polarisRegistration.getServiceId();
assertThat(String.format(format, groupName, SERVICE_PROVIDER).equals(serviceId));
}
@Test
public void testGetNacosMetadata() {
String clusterName = "cluster";
when(nacosContextProperties.getClusterName()).thenReturn(clusterName);
Map<String, String> metadata = polarisRegistration.getMetadata();
assertThat(metadata).isNotNull();
assertThat(metadata).isNotEmpty();
assertThat(metadata.size()).isEqualTo(4);
assertThat(metadata.get("internal-nacos-cluster")).isEqualTo(clusterName);
}
}

Loading…
Cancel
Save