feat:support dual discovery

pull/1718/head
fishtailfu 2 weeks ago
parent 7936f0e1fa
commit 7e755c046e

@ -23,7 +23,6 @@ import java.util.List;
import java.util.stream.Collectors;
import com.tencent.cloud.common.pojo.PolarisServiceInstance;
import com.tencent.cloud.common.util.DiscoveryUtil;
import com.tencent.polaris.api.exception.PolarisException;
import com.tencent.polaris.api.pojo.Instance;
import com.tencent.polaris.api.pojo.ServiceInfo;
@ -51,7 +50,6 @@ public class PolarisServiceDiscovery {
* @throws PolarisException polarisException
*/
public List<ServiceInstance> getInstances(String serviceId) throws PolarisException {
serviceId = DiscoveryUtil.rewriteServiceId(serviceId);
List<ServiceInstance> instances = new ArrayList<>();
InstancesResponse filteredInstances = polarisDiscoveryHandler.getHealthyInstances(serviceId);
ServiceInstances serviceInstances = filteredInstances.toServiceInstances();

@ -61,7 +61,15 @@ public class NacosConfigModifier implements PolarisConfigModifier {
/**
* nacos group.
*/
public static final String GROUP = "group";
public static final String NACOS_GROUP = "nacos.group";
/**
* nacos service.
*/
public static final String NACOS_SERVICE = "nacos.service";
/**
* nacos cluster.
*/
public static final String NACOS_CLUSTER = "nacos.cluster";
private static final Logger LOGGER = LoggerFactory.getLogger(NacosConfigModifier.class);
private static final String ID = "nacos";
private final NacosContextProperties nacosContextProperties;
@ -127,9 +135,14 @@ public class NacosConfigModifier implements PolarisConfigModifier {
}
if (StringUtils.isNotBlank(nacosContextProperties.getGroup())) {
metadata.put(GROUP, nacosContextProperties.getGroup());
metadata.put(NACOS_GROUP, nacosContextProperties.getGroup());
}
if (StringUtils.isNotBlank(nacosContextProperties.getClusterName())) {
metadata.put(NACOS_CLUSTER, nacosContextProperties.getClusterName());
}
if (StringUtils.isNotBlank(nacosContextProperties.getServiceName())) {
metadata.put(NACOS_SERVICE, nacosContextProperties.getServiceName());
}
configuration.getGlobal().getServerConnectors().add(serverConnectorConfig);
DiscoveryConfigImpl discoveryConfig = new DiscoveryConfigImpl();
discoveryConfig.setServerConnectorId(ID);

@ -67,6 +67,13 @@ public class NacosContextProperties {
@Value("${spring.cloud.nacos.discovery.username:}")
private String username;
/**
* service name to registry.
*/
@Value("${spring.cloud.nacos.discovery.service:${spring.application.name:}}")
private String serviceName;
/**
* the nacos authentication password.
*/
@ -170,6 +177,15 @@ public class NacosContextProperties {
this.namespace = namespace;
}
String getServiceName() {
return serviceName;
}
void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
@Override
public String toString() {
return "NacosContextProperties{" +
@ -178,11 +194,12 @@ public class NacosContextProperties {
", registerEnabled=" + registerEnabled +
", serverAddr='" + serverAddr + '\'' +
", username='" + username + '\'' +
", serviceName='" + serviceName + '\'' +
", password='" + password + '\'' +
", clusterName='" + clusterName + '\'' +
", group='" + group + '\'' +
", contextPath='" + contextPath + '\'' +
", namespace='" + namespace + '\'' +
", contextPath='" + contextPath + '\'' +
'}';
}
}

@ -48,9 +48,11 @@ import static com.tencent.cloud.polaris.extend.nacos.NacosContextProperties.DEFA
*/
public class PolarisRegistration implements Registration {
private static final String GROUP_SERVER_ID_FORMAT = "%s__%s";
private static final String NACOS_CLUSTER = "nacos.cluster";
private static final String NACOS_GROUP = "nacos.group";
private final PolarisDiscoveryProperties polarisDiscoveryProperties;
private final SDKContext polarisContext;
@ -83,20 +85,8 @@ public class PolarisRegistration implements Registration {
this.servletWebServerApplicationContext = servletWebServerApplicationContext;
this.reactiveWebServerApplicationContext = reactiveWebServerApplicationContext;
this.customizers = registrationCustomizers;
this.serviceId = polarisDiscoveryProperties.getService();
// generate serviceId
if (Objects.isNull(nacosContextProperties)) {
serviceId = polarisDiscoveryProperties.getService();
}
else {
String group = nacosContextProperties.getGroup();
if (StringUtils.isNotBlank(group) && !DEFAULT_GROUP.equals(group)) {
serviceId = String.format(GROUP_SERVER_ID_FORMAT, group, polarisDiscoveryProperties.getService());
}
else {
serviceId = polarisDiscoveryProperties.getService();
}
}
// generate host
host = polarisContext.getConfig().getGlobal().getAPI().getBindIP();
@ -119,6 +109,10 @@ public class PolarisRegistration implements Registration {
if (StringUtils.isNotBlank(clusterName) && !DEFAULT_CLUSTER.equals(clusterName)) {
instanceMetadata.put(NACOS_CLUSTER, clusterName);
}
String groupName = nacosContextProperties.getGroup();
if (StringUtils.isNotBlank(groupName) && !DEFAULT_GROUP.equals(groupName)) {
instanceMetadata.put(NACOS_GROUP, groupName);
}
}
instanceMetadata.putAll(staticMetadataManager.getMergedStaticMetadata());

@ -134,6 +134,12 @@
"description": "the nacos authentication password.",
"sourceType": "com.tencent.cloud.polaris.extend.nacos.NacosContextProperties"
},
{
"name": "spring.cloud.nacos.discovery.service",
"type": "java.lang.String",
"defaultValue": "${spring.application.name}",
"description": "the service name to register, default value is ${spring.application.name}."
},
{
"name": "spring.cloud.nacos.discovery.register-enabled",
"type": "java.lang.Boolean",
@ -180,7 +186,7 @@
],
"hints": [
{
"name": "spring.cloud.loadbalancer.strategy",
"name": "spring.cloud.loadbalancer.strategies",
"values": [
{
"value": "polarisWeightedRoundRobin",

@ -86,7 +86,7 @@ public class NacosContextPropertiesTest {
assertThat(metadata.get(NacosConfigModifier.PASSWORD)).isEqualTo(nacosContextProperties.getPassword());
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());
assertThat(metadata.get(NacosConfigModifier.NACOS_GROUP)).isEqualTo(nacosContextProperties.getGroup());
}
@SpringBootApplication

@ -19,11 +19,13 @@ package com.tencent.cloud.polaris.router;
import com.tencent.cloud.common.constant.OrderConstant;
import com.tencent.cloud.polaris.context.PolarisConfigModifier;
import com.tencent.cloud.polaris.router.config.properties.PolarisMetadataRouterProperties;
import com.tencent.cloud.polaris.router.config.properties.PolarisNearByRouterProperties;
import com.tencent.polaris.api.config.consumer.ServiceRouterConfig;
import com.tencent.polaris.api.utils.StringUtils;
import com.tencent.polaris.factory.config.ConfigurationImpl;
import com.tencent.polaris.plugins.router.healthy.RecoverRouterConfig;
import com.tencent.polaris.plugins.router.metadata.MetadataRouterConfig;
import com.tencent.polaris.plugins.router.nearby.NearbyRouterConfig;
import com.tencent.polaris.specification.api.v1.traffic.manage.RoutingProto;
@ -36,8 +38,10 @@ public class RouterConfigModifier implements PolarisConfigModifier {
private final PolarisNearByRouterProperties polarisNearByRouterProperties;
public RouterConfigModifier(PolarisNearByRouterProperties polarisNearByRouterProperties) {
private final PolarisMetadataRouterProperties polarisMetadataRouterProperties;
public RouterConfigModifier(PolarisNearByRouterProperties polarisNearByRouterProperties, PolarisMetadataRouterProperties polarisMetadataRouterProperties) {
this.polarisNearByRouterProperties = polarisNearByRouterProperties;
this.polarisMetadataRouterProperties = polarisMetadataRouterProperties;
}
@Override
@ -50,7 +54,9 @@ public class RouterConfigModifier implements PolarisConfigModifier {
// Update modified config to source properties
configuration.getConsumer().getServiceRouter()
.setPluginConfig(ServiceRouterConfig.DEFAULT_ROUTER_RECOVER, recoverRouterConfig);
MetadataRouterConfig metadataRouterConfig = configuration.getConsumer().getServiceRouter().getPluginConfig(
ServiceRouterConfig.DEFAULT_ROUTER_METADATA, MetadataRouterConfig.class);
metadataRouterConfig.setMetadataFailOverType(polarisMetadataRouterProperties.getFailoverType());
if (StringUtils.isNotBlank(polarisNearByRouterProperties.getMatchLevel())) {
RoutingProto.NearbyRoutingConfig.LocationLevel locationLevel =
RoutingProto.NearbyRoutingConfig.LocationLevel.valueOf(StringUtils.upperCase(polarisNearByRouterProperties.getMatchLevel()));

@ -41,8 +41,8 @@ public class RouterConfigModifierAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public RouterConfigModifier routerConfigModifier(PolarisNearByRouterProperties polarisNearByRouterProperties) {
return new RouterConfigModifier(polarisNearByRouterProperties);
public RouterConfigModifier routerConfigModifier(PolarisNearByRouterProperties polarisNearByRouterProperties, PolarisMetadataRouterProperties polarisMetadataRouterProperties) {
return new RouterConfigModifier(polarisNearByRouterProperties, polarisMetadataRouterProperties);
}
}

@ -17,6 +17,9 @@
package com.tencent.cloud.polaris.router.config.properties;
import com.tencent.polaris.api.rpc.MetadataFailoverType;
import com.tencent.polaris.plugins.router.metadata.FailOverType;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
@ -28,6 +31,16 @@ public class PolarisMetadataRouterProperties {
private boolean enabled = true;
private FailOverType failoverType = FailOverType.all;
public FailOverType getFailoverType() {
return failoverType;
}
public void setFailoverType(FailOverType failoverType) {
this.failoverType = failoverType;
}
public boolean isEnabled() {
return enabled;
}

@ -25,7 +25,6 @@ import java.util.function.BiConsumer;
import com.tencent.cloud.common.constant.MetadataConstant;
import com.tencent.cloud.common.util.ApplicationContextAwareUtils;
import com.tencent.cloud.common.util.DiscoveryUtil;
import com.tencent.polaris.metadata.core.MetadataContainer;
import com.tencent.polaris.metadata.core.MetadataMapValue;
import com.tencent.polaris.metadata.core.MetadataObjectValue;
@ -107,7 +106,6 @@ public class MetadataContext extends com.tencent.polaris.metadata.core.manager.M
LOG.error("namespace should not be blank. please configure spring.cloud.polaris.namespace or "
+ "spring.cloud.polaris.discovery.namespace");
}
namespace = DiscoveryUtil.rewriteNamespace(namespace);
LOCAL_NAMESPACE = namespace;
String serviceName = ApplicationContextAwareUtils
@ -121,7 +119,6 @@ public class MetadataContext extends com.tencent.polaris.metadata.core.manager.M
LOG.warn("service name should not be blank. please configure spring.cloud.polaris.service or "
+ "spring.cloud.polaris.discovery.service or spring.application.name");
}
serviceName = DiscoveryUtil.rewriteServiceId(serviceName);
LOCAL_SERVICE = serviceName;
}

Loading…
Cancel
Save