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.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;
@ -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.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;
@ -42,7 +40,6 @@ 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"; private static final String ADDRESS_FORMAT = "%s:%s@%s";
private static final String INTERNAL_NACOS_CLUSTER = "internal-nacos-cluster";
private final NacosContextProperties nacosContextProperties; private final NacosContextProperties nacosContextProperties;
@ -55,7 +52,6 @@ public class NacosConfigModifier implements PolarisConfigModifier {
if (Objects.isNull(nacosContextProperties) || !nacosContextProperties.isEnabled()) { if (Objects.isNull(nacosContextProperties) || !nacosContextProperties.isEnabled()) {
return; return;
} }
if (CollectionUtils.isEmpty(configuration.getGlobal().getServerConnectors())) { if (CollectionUtils.isEmpty(configuration.getGlobal().getServerConnectors())) {
configuration.getGlobal().setServerConnectors(new ArrayList<>()); configuration.getGlobal().setServerConnectors(new ArrayList<>());
} }
@ -70,12 +66,6 @@ public class NacosConfigModifier implements PolarisConfigModifier {
serverConnectorConfig.setAddresses( serverConnectorConfig.setAddresses(
Collections.singletonList(address)); Collections.singletonList(address));
serverConnectorConfig.setProtocol(DefaultPlugins.SERVER_CONNECTOR_NACOS); 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); configuration.getGlobal().getServerConnectors().add(serverConnectorConfig);
DiscoveryConfigImpl discoveryConfig = new DiscoveryConfigImpl(); DiscoveryConfigImpl discoveryConfig = new DiscoveryConfigImpl();
discoveryConfig.setServerConnectorId(ID); discoveryConfig.setServerConnectorId(ID);

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

@ -35,6 +35,7 @@ import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import org.springframework.util.CollectionUtils; 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; 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_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 final PolarisDiscoveryProperties polarisDiscoveryProperties; private final PolarisDiscoveryProperties polarisDiscoveryProperties;
@ -130,6 +132,12 @@ public class PolarisRegistration implements Registration {
instanceMetadata.put(METADATA_KEY_IP, host); instanceMetadata.put(METADATA_KEY_IP, host);
instanceMetadata.put(METADATA_KEY_ADDRESS, host + ":" + polarisDiscoveryProperties.getPort()); 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()); instanceMetadata.putAll(staticMetadataManager.getMergedStaticMetadata());
this.metadata = instanceMetadata; this.metadata = instanceMetadata;
@ -155,12 +163,14 @@ public class PolarisRegistration implements Registration {
boolean registerEnabled = false; boolean registerEnabled = false;
if (null != polarisDiscoveryProperties) { if (null != polarisDiscoveryProperties) {
registerEnabled |= polarisDiscoveryProperties.isRegisterEnabled(); registerEnabled = polarisDiscoveryProperties.isRegisterEnabled();
} }
if (null != consulContextProperties && consulContextProperties.isEnabled()) { if (null != consulContextProperties && consulContextProperties.isEnabled()) {
registerEnabled |= consulContextProperties.isRegister(); registerEnabled |= consulContextProperties.isRegister();
} }
if (null != nacosContextProperties && nacosContextProperties.isEnabled()) {
registerEnabled |= nacosContextProperties.isRegisterEnabled();
}
return registerEnabled; return registerEnabled;
} }

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

@ -135,9 +135,20 @@ public class PolarisRegistrationTest {
@Test @Test
public void testGetNacosServiceId() { public void testGetNacosServiceId() {
String groupName = "group"; String groupName = "group";
String format = "%s_%s"; String format = "%s__%s";
when(nacosContextProperties.getGroup()).thenReturn("group"); when(nacosContextProperties.getGroup()).thenReturn(groupName);
String serviceId = polarisRegistration.getServiceId(); String serviceId = polarisRegistration.getServiceId();
assertThat(String.format(format, groupName, SERVICE_PROVIDER).equals(serviceId)); 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