diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/reporter/CircuitBreakerPlugin.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/reporter/CircuitBreakerPlugin.java index d293fcd59..d877d9ad5 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/reporter/CircuitBreakerPlugin.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/reporter/CircuitBreakerPlugin.java @@ -70,7 +70,7 @@ public class CircuitBreakerPlugin implements EnhancedPlugin { EnhancedRequestContext request = context.getRequest(); EnhancedResponseContext response = context.getResponse(); - String governanceNamespace = MetadataContextHolder.get().getDisposableMetadata().get(ContextConstant.POLARIS_GOVERNANCE_TARGET_NAMESPACE); + String governanceNamespace = MetadataContextHolder.get().getDisposableMetadata().get(ContextConstant.POLARIS_GOVERNANCE_NAMESPACE); if (StringUtils.isEmpty(governanceNamespace)) { governanceNamespace = MetadataContext.LOCAL_NAMESPACE; } diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/reporter/ExceptionCircuitBreakerReporter.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/reporter/ExceptionCircuitBreakerReporter.java index 3ad00ea13..9968bbf42 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/reporter/ExceptionCircuitBreakerReporter.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/reporter/ExceptionCircuitBreakerReporter.java @@ -82,7 +82,7 @@ public class ExceptionCircuitBreakerReporter implements EnhancedPlugin { .orElse(new DefaultServiceInstance()); if (LOG.isDebugEnabled()) { - String governanceNamespace = MetadataContextHolder.get().getDisposableMetadata().get(ContextConstant.POLARIS_GOVERNANCE_TARGET_NAMESPACE); + String governanceNamespace = MetadataContextHolder.get().getDisposableMetadata().get(ContextConstant.POLARIS_GOVERNANCE_NAMESPACE); LOG.debug("governanceNamespace={}, serviceInstance:{}", governanceNamespace, serviceInstance); } ResourceStat resourceStat = PolarisEnhancedPluginUtils.createInstanceResourceStat( 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 1aef247d6..a99f99fb6 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 @@ -84,7 +84,7 @@ public class PolarisServiceDiscovery { return Collections.emptyList(); } return polarisDiscoveryHandler.getServices().getServices().stream() - .map(ServiceInfo::getService).collect(Collectors.toList()); + .map(ServiceInfo::getService).distinct().collect(Collectors.toList()); } } diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisLoadBalancerCompositeRule.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisLoadBalancerCompositeRule.java index 0a3e887b1..dd7c26ae0 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisLoadBalancerCompositeRule.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisLoadBalancerCompositeRule.java @@ -195,6 +195,8 @@ public class PolarisLoadBalancerCompositeRule extends AbstractLoadBalancerRule { filteredInstances.add(new PolarisServer(serviceInstances, instance)); } + filteredInstances.addAll(LoadBalancerUtils.filterNonPolarisServers(allServers)); + return filteredInstances; } diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/PolarisLoadBalancerCompositeRuleBeanPostProcessor.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/PolarisLoadBalancerCompositeRuleBeanPostProcessor.java index fe0d613ad..af7e272ca 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/PolarisLoadBalancerCompositeRuleBeanPostProcessor.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/PolarisLoadBalancerCompositeRuleBeanPostProcessor.java @@ -33,6 +33,7 @@ import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.core.Ordered; import org.springframework.lang.NonNull; /** @@ -40,7 +41,12 @@ import org.springframework.lang.NonNull; * * @author derekyi 2022-08-01 */ -public class PolarisLoadBalancerCompositeRuleBeanPostProcessor implements BeanPostProcessor, BeanFactoryAware { +public class PolarisLoadBalancerCompositeRuleBeanPostProcessor implements BeanPostProcessor, BeanFactoryAware, Ordered { + + /** + * The order of the bean post processor. if user want to wrap it(CustomRule -> PolarisLoadBalancerCompositeRule), CustomRuleBeanPostProcessor's order should be bigger than ${@link POLARIS_LOAD_BALANCER_COMPOSITE_RULE_POST_PROCESSOR_ORDER}. + */ + public static final int POLARIS_LOAD_BALANCER_COMPOSITE_RULE_POST_PROCESSOR_ORDER = 0; private BeanFactory beanFactory; @@ -64,4 +70,9 @@ public class PolarisLoadBalancerCompositeRuleBeanPostProcessor implements BeanPo public void setBeanFactory(@NonNull BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } + + @Override + public int getOrder() { + return POLARIS_LOAD_BALANCER_COMPOSITE_RULE_POST_PROCESSOR_ORDER; + } } diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/RetryLoadBalancerInterceptorBeanPostProcessor.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/RetryLoadBalancerInterceptorBeanPostProcessor.java index abed67ab4..c29d96d0c 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/RetryLoadBalancerInterceptorBeanPostProcessor.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/RetryLoadBalancerInterceptorBeanPostProcessor.java @@ -19,6 +19,7 @@ package com.tencent.cloud.polaris.router.beanprocessor; import com.tencent.cloud.polaris.router.resttemplate.PolarisRetryLoadBalancerInterceptor; import com.tencent.cloud.polaris.router.resttemplate.RouterContextFactory; +import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginRunner; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; @@ -29,6 +30,7 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.cloud.client.loadbalancer.LoadBalancerRequestFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancerRetryProperties; import org.springframework.cloud.client.loadbalancer.RetryLoadBalancerInterceptor; +import org.springframework.core.Ordered; import org.springframework.lang.NonNull; /** @@ -37,7 +39,11 @@ import org.springframework.lang.NonNull; * * @author lepdou 2022-10-09 */ -public class RetryLoadBalancerInterceptorBeanPostProcessor implements BeanPostProcessor, BeanFactoryAware { +public class RetryLoadBalancerInterceptorBeanPostProcessor implements BeanPostProcessor, BeanFactoryAware, Ordered { + /** + * The order of the bean post processor. if user want to wrap it(CustomLoadBalancerInterceptor -> PolarisRetryLoadBalancerInterceptor), CustomLoadBalancerInterceptorBeanPostProcessor's order should be bigger than ${@link POLARIS_RETRY_LOAD_BALANCER_INTERCEPTOR_POST_PROCESSOR_ORDER}. + */ + public static final int POLARIS_RETRY_LOAD_BALANCER_INTERCEPTOR_POST_PROCESSOR_ORDER = 0; private BeanFactory factory; @@ -58,10 +64,16 @@ public class RetryLoadBalancerInterceptorBeanPostProcessor implements BeanPostPr LoadBalancerRequestFactory requestFactory = this.factory.getBean(LoadBalancerRequestFactory.class); LoadBalancedRetryFactory lbRetryFactory = this.factory.getBean(LoadBalancedRetryFactory.class); RouterContextFactory routerContextFactory = this.factory.getBean(RouterContextFactory.class); + EnhancedPluginRunner pluginRunner = this.factory.getBean(EnhancedPluginRunner.class); return new PolarisRetryLoadBalancerInterceptor(loadBalancerClient, lbProperties, requestFactory, lbRetryFactory, - routerContextFactory); + routerContextFactory, pluginRunner); } return bean; } + + @Override + public int getOrder() { + return POLARIS_RETRY_LOAD_BALANCER_INTERCEPTOR_POST_PROCESSOR_ORDER; + } } diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/resttemplate/PolarisRetryLoadBalancerInterceptor.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/resttemplate/PolarisRetryLoadBalancerInterceptor.java index abe73abc2..7bf0e9e20 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/resttemplate/PolarisRetryLoadBalancerInterceptor.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/resttemplate/PolarisRetryLoadBalancerInterceptor.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.net.URI; import com.tencent.cloud.polaris.router.PolarisRouterContext; +import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginRunner; +import com.tencent.cloud.rpc.enhancement.resttemplate.EnhancedRestTemplateWrapInterceptor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -34,6 +36,7 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.cloud.client.loadbalancer.LoadBalancerRequestFactory; import org.springframework.cloud.client.loadbalancer.LoadBalancerRetryProperties; import org.springframework.cloud.client.loadbalancer.RetryLoadBalancerInterceptor; +import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient; import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.http.client.ClientHttpResponse; @@ -64,14 +67,18 @@ public class PolarisRetryLoadBalancerInterceptor extends RetryLoadBalancerInterc private final RouterContextFactory routerContextFactory; + private final EnhancedPluginRunner enhancedPluginRunner; + public PolarisRetryLoadBalancerInterceptor(LoadBalancerClient loadBalancer, LoadBalancerRetryProperties lbProperties, - LoadBalancerRequestFactory requestFactory, LoadBalancedRetryFactory lbRetryFactory, RouterContextFactory routerContextFactory) { + LoadBalancerRequestFactory requestFactory, LoadBalancedRetryFactory lbRetryFactory, + RouterContextFactory routerContextFactory, EnhancedPluginRunner enhancedPluginRunner) { super(loadBalancer, lbProperties, requestFactory, lbRetryFactory); this.loadBalancer = loadBalancer; this.lbProperties = lbProperties; this.requestFactory = requestFactory; this.lbRetryFactory = lbRetryFactory; this.routerContextFactory = routerContextFactory; + this.enhancedPluginRunner = enhancedPluginRunner; } @Override @@ -111,8 +118,17 @@ public class PolarisRetryLoadBalancerInterceptor extends RetryLoadBalancerInterc } //3. execute request - ClientHttpResponse response = loadBalancer.execute(serviceName, serviceInstance, - requestFactory.createRequest(request, body, execution)); + ClientHttpResponse response; + if (enhancedPluginRunner != null) { + EnhancedRestTemplateWrapInterceptor enhancedRestTemplatePluginRunnerInterceptor = + new EnhancedRestTemplateWrapInterceptor(enhancedPluginRunner, (RibbonLoadBalancerClient) loadBalancer); + response = enhancedRestTemplatePluginRunnerInterceptor.intercept( + request, serviceName, this.requestFactory.createRequest(request, body, execution), routerContext); + } + else { + response = loadBalancer.execute(serviceName, serviceInstance, + requestFactory.createRequest(request, body, execution)); + } //4. set router context to response RouterContextHelper.setRouterContextToResponse(routerContext, response); diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/ContextConstant.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/ContextConstant.java index fb285fac1..e1acf9d41 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/ContextConstant.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/ContextConstant.java @@ -33,7 +33,7 @@ public final class ContextConstant { /** * Metadata key for target governance namespace. */ - public static final String POLARIS_GOVERNANCE_TARGET_NAMESPACE = "POLARIS_GOVERNANCE_TARGET_NAMESPACE"; + public static final String POLARIS_GOVERNANCE_NAMESPACE = "POLARIS_GOVERNANCE_NAMESPACE"; /** * SCT Default Charset . diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/main/java/com/tencent/cloud/plugin/lossless/config/LosslessAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/main/java/com/tencent/cloud/plugin/lossless/config/LosslessAutoConfiguration.java index 4c902dd2a..d34a88711 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/main/java/com/tencent/cloud/plugin/lossless/config/LosslessAutoConfiguration.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/main/java/com/tencent/cloud/plugin/lossless/config/LosslessAutoConfiguration.java @@ -17,6 +17,8 @@ package com.tencent.cloud.plugin.lossless.config; +import java.util.List; + import com.tencent.cloud.plugin.lossless.LosslessRegistryAspect; import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled; import com.tencent.cloud.polaris.context.PolarisSDKContextManager; @@ -43,11 +45,37 @@ public class LosslessAutoConfiguration { @Bean @ConditionalOnMissingBean public LosslessRegistryAspect losslessRegistryAspect( - ServiceRegistry serviceRegistry, Registration registration, PolarisContextProperties properties, - LosslessProperties losslessProperties, PolarisSDKContextManager polarisSDKContextManager, - RegistrationTransformer registrationTransformer) { - return new LosslessRegistryAspect(serviceRegistry, registration, properties, losslessProperties, - polarisSDKContextManager, registrationTransformer); + List serviceRegistryList, List registrationList, List registrationTransformerList, + PolarisContextProperties properties, LosslessProperties losslessProperties, PolarisSDKContextManager polarisSDKContextManager) { + // if contains multiple service registry, we need to find the polaris service registry + ServiceRegistry targetServiceRegistry = null; + Registration targetRegistration = null; + RegistrationTransformer targetRegistrationTransformer = null; + if (serviceRegistryList.size() == 1 && registrationList.size() == 1 && registrationTransformerList.size() == 1) { + targetServiceRegistry = serviceRegistryList.get(0); + targetRegistration = registrationList.get(0); + targetRegistrationTransformer = registrationTransformerList.get(0); + } + else { + for (ServiceRegistry serviceRegistry : serviceRegistryList) { + if (serviceRegistry.getClass().getSimpleName().contains("Polaris")) { + targetServiceRegistry = serviceRegistry; + } + } + for (Registration registration : registrationList) { + if (registration.getClass().getSimpleName().contains("Polaris")) { + targetRegistration = registration; + } + } + for (RegistrationTransformer registrationTransformer : registrationTransformerList) { + if (registrationTransformer.getClass().getSimpleName().contains("Polaris")) { + targetRegistrationTransformer = registrationTransformer; + } + } + } + + return new LosslessRegistryAspect(targetServiceRegistry, targetRegistration, properties, losslessProperties, + polarisSDKContextManager, targetRegistrationTransformer); } } diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java index 3b643c8c6..61c2a838c 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java +++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java @@ -57,4 +57,14 @@ public final class LoadBalancerUtils { return new DefaultServiceInstances(serviceKey, instances); } + + public static List filterNonPolarisServers(List servers) { + List result = new ArrayList<>(servers.size()); + for (Server server : servers) { + if (!(server instanceof PolarisServer)) { + result.add(server); + } + } + return result; + } } diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java index 82f979656..946832299 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java +++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java @@ -23,6 +23,7 @@ import java.util.LinkedList; import java.util.List; import com.netflix.client.config.IClientConfig; +import com.netflix.loadbalancer.ConfigurationBasedServerList; import com.netflix.loadbalancer.DynamicServerListLoadBalancer; import com.netflix.loadbalancer.IPing; import com.netflix.loadbalancer.IRule; @@ -59,6 +60,8 @@ public class PolarisLoadBalancer extends DynamicServerListLoadBalancer { private final PolarisLoadBalancerProperties polarisLoadBalancerProperties; private final InstanceTransformer instanceTransformer; + // when configuring by user, use origin getReachableServers and getAllServers to get instances. + private final boolean isPolarisDefaultServerList; public PolarisLoadBalancer(IClientConfig config, IRule rule, IPing ping, ServerList serverList, ConsumerAPI consumerAPI, PolarisLoadBalancerProperties properties, InstanceTransformer instanceTransformer) { @@ -66,6 +69,8 @@ public class PolarisLoadBalancer extends DynamicServerListLoadBalancer { this.consumerAPI = consumerAPI; this.polarisLoadBalancerProperties = properties; this.instanceTransformer = instanceTransformer; + // PolarisDiscoveryRibbonAutoConfiguration will not load, so default server list is ConfigurationBasedServerList. + this.isPolarisDefaultServerList = serverList instanceof ConfigurationBasedServerList; } @Override @@ -79,10 +84,18 @@ public class PolarisLoadBalancer extends DynamicServerListLoadBalancer { if (THREAD_CACHE_SERVERS.get() != null) { return THREAD_CACHE_SERVERS.get(); } - return getReachableServersWithoutCache(); + if (isPolarisDefaultServerList) { + return getReachableServersWithoutCache(); + } + else { + return super.getReachableServers(); + } } public List getReachableServersWithoutCache() { + if (!isPolarisDefaultServerList) { + return super.getReachableServers(); + } ServiceInstances serviceInstances; if (polarisLoadBalancerProperties.getDiscoveryType().equals(ContextConstant.POLARIS)) { serviceInstances = getPolarisDiscoveryServiceInstances(); @@ -142,7 +155,12 @@ public class PolarisLoadBalancer extends DynamicServerListLoadBalancer { @Override public List getAllServers() { - return getReachableServers(); + if (isPolarisDefaultServerList) { + return getReachableServers(); + } + else { + return super.getAllServers(); + } } /** diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfiguration.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfiguration.java index d3b88e66f..50a415422 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfiguration.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfiguration.java @@ -104,9 +104,9 @@ public class RpcEnhancementAutoConfiguration { @Lazy public EnhancedPluginRunner enhancedFeignPluginRunner( @Autowired(required = false) List enhancedPlugins, - @Autowired(required = false) Registration registration, + @Autowired(required = false) List registrations, PolarisSDKContextManager polarisSDKContextManager) { - return new DefaultEnhancedPluginRunner(enhancedPlugins, registration, polarisSDKContextManager.getSDKContext()); + return new DefaultEnhancedPluginRunner(enhancedPlugins, registrations, polarisSDKContextManager.getSDKContext()); } @Bean diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/DefaultEnhancedPluginRunner.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/DefaultEnhancedPluginRunner.java index c311de1e5..d6f84805b 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/DefaultEnhancedPluginRunner.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/DefaultEnhancedPluginRunner.java @@ -42,6 +42,16 @@ public class DefaultEnhancedPluginRunner implements EnhancedPluginRunner { private final ServiceInstance localServiceInstance; + public DefaultEnhancedPluginRunner( + List enhancedPlugins, + List registration, + SDKContext sdkContext + ) { + this(enhancedPlugins, + getPolarisRegistration(registration), + sdkContext); + } + public DefaultEnhancedPluginRunner( List enhancedPlugins, Registration registration, @@ -89,4 +99,17 @@ public class DefaultEnhancedPluginRunner implements EnhancedPluginRunner { return this.localServiceInstance; } + private static Registration getPolarisRegistration(List registration) { + + if (CollectionUtils.isEmpty(registration)) { + return null; + } + + for (Registration reg : registration) { + if (reg.getClass().getCanonicalName().equals("com.tencent.cloud.polaris.registry.PolarisRegistration")) { + return reg; + } + } + return registration.get(0); + } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/PolarisEnhancedPluginUtils.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/PolarisEnhancedPluginUtils.java index 27b78042b..c93905c3a 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/PolarisEnhancedPluginUtils.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/plugin/PolarisEnhancedPluginUtils.java @@ -136,7 +136,7 @@ public final class PolarisEnhancedPluginUtils { @Nullable String calleeServiceName, @Nullable String calleeHost, @Nullable Integer calleePort, URI uri, @Nullable Integer statusCode, long delay, @Nullable Throwable exception) { - String governanceNamespace = MetadataContextHolder.get().getDisposableMetadata().get(ContextConstant.POLARIS_GOVERNANCE_TARGET_NAMESPACE); + String governanceNamespace = MetadataContextHolder.get().getDisposableMetadata().get(ContextConstant.POLARIS_GOVERNANCE_NAMESPACE); if (StringUtils.isBlank(governanceNamespace)) { governanceNamespace = MetadataContext.LOCAL_NAMESPACE; }