diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisServiceDiscovery.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisServiceDiscovery.java index 0e4536293..8a8249a82 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisServiceDiscovery.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisServiceDiscovery.java @@ -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 getInstances(String serviceId) throws PolarisException { - serviceId = DiscoveryUtil.rewriteServiceId(serviceId); List instances = new ArrayList<>(); InstancesResponse filteredInstances = polarisDiscoveryHandler.getHealthyInstances(serviceId); ServiceInstances serviceInstances = filteredInstances.toServiceInstances(); diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosConfigModifier.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosConfigModifier.java index f4958024a..6a3b9444e 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosConfigModifier.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosConfigModifier.java @@ -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); diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosContextProperties.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosContextProperties.java index da45f8df2..fba9e8da6 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosContextProperties.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/extend/nacos/NacosContextProperties.java @@ -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 + '\'' + '}'; } } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java index 1edd6ab42..3433998f9 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java @@ -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()); diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 5f3416f97..39760f66e 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -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", diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/extend/nacos/NacosContextPropertiesTest.java b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/extend/nacos/NacosContextPropertiesTest.java index 3902f833c..9b0aabc10 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/extend/nacos/NacosContextPropertiesTest.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/extend/nacos/NacosContextPropertiesTest.java @@ -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 diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/RouterConfigModifier.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/RouterConfigModifier.java index b99c3c08c..19f83a45d 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/RouterConfigModifier.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/RouterConfigModifier.java @@ -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())); diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/RouterConfigModifierAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/RouterConfigModifierAutoConfiguration.java index c428b4a0a..0cb5a00f1 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/RouterConfigModifierAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/RouterConfigModifierAutoConfiguration.java @@ -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); } } diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/properties/PolarisMetadataRouterProperties.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/properties/PolarisMetadataRouterProperties.java index a63ec1345..0cbf2b07e 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/properties/PolarisMetadataRouterProperties.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/properties/PolarisMetadataRouterProperties.java @@ -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; } diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java index 6d86e6d04..15a7b6b73 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java @@ -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; }