From 5d7310a9e7856bbeec255c9c46bc9ea3110356b6 Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Thu, 30 Mar 2023 17:28:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:webclient=E6=94=AF=E6=8C=81=E4=B8=8A?= =?UTF-8?q?=E6=8A=A5=E8=B0=83=E7=94=A8=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitbreaker/PolarisCircuitBreaker.java | 5 +- .../ReactivePolarisCircuitBreaker.java | 6 +- .../util/PolarisCircuitBreakerUtils.java | 20 +++-- ...olarisLoadBalancerClientConfiguration.java | 15 ++-- ...sLoadBalancerClientRequestTransformer.java | 1 + .../cloud/common/constant/HeaderConstant.java | 8 +- .../src/main/resources/bootstrap.yml | 2 +- .../example/service/caller/Controller.java | 18 ++-- .../caller/RateLimitCallerService.java | 1 + .../src/main/resources/bootstrap.yml | 2 +- .../RpcEnhancementAutoConfiguration.java | 10 +-- .../feign/plugin/reporter/ReporterUtils.java | 2 +- .../EnhancedRestTemplateReporter.java | 4 +- .../webclient/EnhancedWebClientReporter.java | 84 ++++++++++--------- .../ExceptionPolarisReporterTest.java | 3 +- .../reporter/SuccessPolarisReporterTest.java | 6 +- 16 files changed, 93 insertions(+), 94 deletions(-) diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/PolarisCircuitBreaker.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/PolarisCircuitBreaker.java index 8a78a07aa..3a6914940 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/PolarisCircuitBreaker.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/PolarisCircuitBreaker.java @@ -50,8 +50,8 @@ public class PolarisCircuitBreaker implements CircuitBreaker { private final ConsumerAPI consumerAPI; public PolarisCircuitBreaker(PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration conf, - ConsumerAPI consumerAPI, - CircuitBreakAPI circuitBreakAPI) { + ConsumerAPI consumerAPI, + CircuitBreakAPI circuitBreakAPI) { FunctionalDecoratorRequest makeDecoratorRequest = new FunctionalDecoratorRequest(new ServiceKey(conf.getNamespace(), conf.getService()), conf.getMethod()); makeDecoratorRequest.setSourceService(new ServiceKey(conf.getSourceNamespace(), conf.getSourceService())); makeDecoratorRequest.setResultToErrorCode(new PolarisResultToErrorCode()); @@ -76,5 +76,4 @@ public class PolarisCircuitBreaker implements CircuitBreaker { } } - } diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/ReactivePolarisCircuitBreaker.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/ReactivePolarisCircuitBreaker.java index 37fe0bfdb..56b633ef4 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/ReactivePolarisCircuitBreaker.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/ReactivePolarisCircuitBreaker.java @@ -30,8 +30,6 @@ import com.tencent.polaris.circuitbreak.api.InvokeHandler; import com.tencent.polaris.circuitbreak.api.pojo.FunctionalDecoratorRequest; import com.tencent.polaris.circuitbreak.api.pojo.InvokeContext; import com.tencent.polaris.circuitbreak.client.exception.CallAbortedException; -import com.tencent.polaris.client.api.SDKContext; -import com.tencent.polaris.factory.api.DiscoveryAPIFactory; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -51,8 +49,8 @@ public class ReactivePolarisCircuitBreaker implements ReactiveCircuitBreaker { private final PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration conf; public ReactivePolarisCircuitBreaker(PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration conf, - ConsumerAPI consumerAPI, - CircuitBreakAPI circuitBreakAPI) { + ConsumerAPI consumerAPI, + CircuitBreakAPI circuitBreakAPI) { InvokeContext.RequestContext requestContext = new FunctionalDecoratorRequest(new ServiceKey(conf.getNamespace(), conf.getService()), conf.getMethod()); requestContext.setSourceService(new ServiceKey(conf.getSourceNamespace(), conf.getSourceService())); requestContext.setResultToErrorCode(new PolarisResultToErrorCode()); diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/util/PolarisCircuitBreakerUtils.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/util/PolarisCircuitBreakerUtils.java index 337b1287a..cb66e8fd5 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/util/PolarisCircuitBreakerUtils.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/util/PolarisCircuitBreakerUtils.java @@ -17,8 +17,9 @@ package com.tencent.cloud.polaris.circuitbreaker.util; -import com.tencent.cloud.common.metadata.MetadataContext; +import java.util.Objects; +import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.polaris.circuitbreaker.common.PolarisCircuitBreakerConfigBuilder; import com.tencent.polaris.api.core.ConsumerAPI; import com.tencent.polaris.api.pojo.RetStatus; @@ -29,9 +30,8 @@ import com.tencent.polaris.discovery.client.api.DefaultConsumerAPI; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.util.Assert; -import java.util.Objects; +import org.springframework.util.Assert; /** * PolarisCircuitBreakerUtils. @@ -57,16 +57,16 @@ public final class PolarisCircuitBreakerUtils { Assert.hasText(id, "A CircuitBreaker must have an id. Id could be : namespace#service#method or service#method or service"); String[] polarisCircuitBreakerMetaData = id.split("#"); if (polarisCircuitBreakerMetaData.length == 2) { - return new String[]{MetadataContext.LOCAL_NAMESPACE, polarisCircuitBreakerMetaData[0], polarisCircuitBreakerMetaData[1]}; + return new String[] {MetadataContext.LOCAL_NAMESPACE, polarisCircuitBreakerMetaData[0], polarisCircuitBreakerMetaData[1]}; } if (polarisCircuitBreakerMetaData.length == 3) { - return new String[]{polarisCircuitBreakerMetaData[0], polarisCircuitBreakerMetaData[1], polarisCircuitBreakerMetaData[2]}; + return new String[] {polarisCircuitBreakerMetaData[0], polarisCircuitBreakerMetaData[1], polarisCircuitBreakerMetaData[2]}; } - return new String[]{MetadataContext.LOCAL_NAMESPACE, id, ""}; + return new String[] {MetadataContext.LOCAL_NAMESPACE, id, ""}; } public static void reportStatus(ConsumerAPI consumerAPI, - PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration conf, CallAbortedException e) { + PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration conf, CallAbortedException e) { try { ServiceCallResult result = new ServiceCallResult(); result.setMethod(conf.getMethod()); @@ -80,13 +80,15 @@ public final class PolarisCircuitBreakerUtils { result.setRetCode(e.getFallbackInfo().getCode()); } - String callerIp = ((DefaultConsumerAPI) consumerAPI).getSDKContext().getConfig().getGlobal().getAPI().getBindIP(); + String callerIp = ((DefaultConsumerAPI) consumerAPI).getSDKContext().getConfig().getGlobal().getAPI() + .getBindIP(); if (StringUtils.isNotBlank(callerIp)) { result.setCallerIp(callerIp); } consumerAPI.updateServiceCallResult(result); - } catch (Throwable ex) { + } + catch (Throwable ex) { LOG.error("[CircuitBreaker]"); } } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java index 16387cb75..cce8b0a9f 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java @@ -70,6 +70,13 @@ public class PolarisLoadBalancerClientConfiguration { loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), routerAPI); } + @Bean + @ConditionalOnMissingBean + public LoadBalancerClientRequestTransformer polarisLoadBalancerClientRequestTransformer(SDKContext sdkContext) { + ConsumerAPI consumerAPI = DiscoveryAPIFactory.createConsumerAPIByContext(sdkContext); + return new PolarisLoadBalancerClientRequestTransformer(consumerAPI); + } + @Configuration(proxyBeanMethods = false) @ConditionalOnReactiveDiscoveryEnabled @Order(REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER) @@ -100,12 +107,4 @@ public class PolarisLoadBalancerClientConfiguration { ServiceInstanceListSupplier.builder().withBlockingDiscoveryClient().build(context)); } } - - @Bean - @ConditionalOnMissingBean - public LoadBalancerClientRequestTransformer polarisLoadBalancerClientRequestTransformer( - SDKContext sdkContext) { - ConsumerAPI consumerAPI = DiscoveryAPIFactory.createConsumerAPIByContext(sdkContext); - return new PolarisLoadBalancerClientRequestTransformer(consumerAPI); - } } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/reactive/PolarisLoadBalancerClientRequestTransformer.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/reactive/PolarisLoadBalancerClientRequestTransformer.java index d98f1dcdd..cee59298b 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/reactive/PolarisLoadBalancerClientRequestTransformer.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/reactive/PolarisLoadBalancerClientRequestTransformer.java @@ -19,6 +19,7 @@ package com.tencent.cloud.polaris.loadbalancer.reactive; import com.tencent.cloud.common.constant.HeaderConstant; import com.tencent.polaris.api.core.ConsumerAPI; + import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerClientRequestTransformer; import org.springframework.http.HttpHeaders; diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/HeaderConstant.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/HeaderConstant.java index b3be4579b..3ba90087e 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/HeaderConstant.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/HeaderConstant.java @@ -18,22 +18,22 @@ package com.tencent.cloud.common.constant; /** - * Built-in system http header fields + * Built-in system http header fields. */ public final class HeaderConstant { /** - * The called service returns the real call result of its own processing request + * The called service returns the real call result of its own processing request. */ public static final String INTERNAL_CALLEE_RET_STATUS = "internal-callee-retstatus"; /** - * The name of the rule that the current limit/circiutbreaker rule takes effect + * The name of the rule that the current limit/circiutbreaker rule takes effect. */ public static final String INTERNAL_ACTIVE_RULE_NAME = "internal-callee-activerule"; /** - * The name information of the called service + * The name information of the called service. */ public static final String INTERNAL_CALLEE_SERVICE_ID = "internal-callee-serviceid"; diff --git a/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-callee-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-callee-service/src/main/resources/bootstrap.yml index 02be1a89c..06f431b8f 100644 --- a/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-callee-service/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-callee-service/src/main/resources/bootstrap.yml @@ -5,7 +5,7 @@ spring: name: RateLimitCalleeService cloud: polaris: - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: default enabled: true ratelimit: diff --git a/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/java/com/tencent/cloud/ratelimit/example/service/caller/Controller.java b/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/java/com/tencent/cloud/ratelimit/example/service/caller/Controller.java index da19053dd..291d509b2 100644 --- a/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/java/com/tencent/cloud/ratelimit/example/service/caller/Controller.java +++ b/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/java/com/tencent/cloud/ratelimit/example/service/caller/Controller.java @@ -17,10 +17,18 @@ package com.tencent.cloud.ratelimit.example.service.caller; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import reactor.core.publisher.Mono; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -33,14 +41,6 @@ import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientResponseException; -import reactor.core.publisher.Mono; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; @RestController @RequestMapping("/business") diff --git a/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/java/com/tencent/cloud/ratelimit/example/service/caller/RateLimitCallerService.java b/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/java/com/tencent/cloud/ratelimit/example/service/caller/RateLimitCallerService.java index 60ad242b9..b4d550e4a 100644 --- a/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/java/com/tencent/cloud/ratelimit/example/service/caller/RateLimitCallerService.java +++ b/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/java/com/tencent/cloud/ratelimit/example/service/caller/RateLimitCallerService.java @@ -19,6 +19,7 @@ package com.tencent.cloud.ratelimit.example.service.caller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalanced; diff --git a/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/resources/bootstrap.yml index acc07a66f..d977986ed 100644 --- a/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-ratelimit-example/ratelimit-caller-service/src/main/resources/bootstrap.yml @@ -5,7 +5,7 @@ spring: name: RateLimitCallerService cloud: polaris: - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: default enabled: true 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 1ad0ede13..d23f7be94 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 @@ -32,8 +32,8 @@ import com.tencent.cloud.rpc.enhancement.resttemplate.BlockingLoadBalancerClient import com.tencent.cloud.rpc.enhancement.resttemplate.EnhancedRestTemplateReporter; import com.tencent.cloud.rpc.enhancement.webclient.EnhancedWebClientReporter; import com.tencent.polaris.api.core.ConsumerAPI; - import com.tencent.polaris.client.api.SDKContext; + import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.support.RootBeanDefinition; @@ -92,15 +92,15 @@ public class RpcEnhancementAutoConfiguration { @Bean public SuccessPolarisReporter successPolarisReporter(RpcEnhancementReporterProperties properties, - @Autowired(required = false) SDKContext context, - @Autowired(required = false) ConsumerAPI consumerAPI) { + @Autowired(required = false) SDKContext context, + @Autowired(required = false) ConsumerAPI consumerAPI) { return new SuccessPolarisReporter(properties, context, consumerAPI); } @Bean public ExceptionPolarisReporter exceptionPolarisReporter(RpcEnhancementReporterProperties properties, - @Autowired(required = false) SDKContext context, - @Autowired(required = false) ConsumerAPI consumerAPI) { + @Autowired(required = false) SDKContext context, + @Autowired(required = false) ConsumerAPI consumerAPI) { return new ExceptionPolarisReporter(properties, context, consumerAPI); } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ReporterUtils.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ReporterUtils.java index 524115d96..9db81834f 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ReporterUtils.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ReporterUtils.java @@ -82,7 +82,7 @@ public final class ReporterUtils { if (StringUtils.isNotBlank(sourceNamespace) && StringUtils.isNotBlank(sourceService)) { resultRequest.setCallerService(new ServiceKey(sourceNamespace, sourceService)); } - if (StringUtils.isNotBlank(context.getConfig().getGlobal().getAPI().getBindIP())) { + if (Objects.nonNull(context)) { resultRequest.setCallerIp(context.getConfig().getGlobal().getAPI().getBindIP()); } String ruleName = getActiveRuleNameFromRequest(response); diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/resttemplate/EnhancedRestTemplateReporter.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/resttemplate/EnhancedRestTemplateReporter.java index d77055fcd..affb876f5 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/resttemplate/EnhancedRestTemplateReporter.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/resttemplate/EnhancedRestTemplateReporter.java @@ -158,7 +158,9 @@ public class EnhancedRestTemplateReporter extends AbstractPolarisReporterAdapter } resultRequest.setRetStatus(getRetStatusFromRequest(response, resultRequest.getRetStatus())); resultRequest.setRuleName(getActiveRuleNameFromRequest(response)); - resultRequest.setCallerIp(context.getConfig().getGlobal().getAPI().getBindIP()); + if (Objects.nonNull(context)) { + resultRequest.setCallerIp(context.getConfig().getGlobal().getAPI().getBindIP()); + } List labels = response.getHeaders().get(RouterConstant.ROUTER_LABEL_HEADER); if (CollectionUtils.isNotEmpty(labels)) { diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/webclient/EnhancedWebClientReporter.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/webclient/EnhancedWebClientReporter.java index 406253660..766bea43f 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/webclient/EnhancedWebClientReporter.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/webclient/EnhancedWebClientReporter.java @@ -17,6 +17,14 @@ package com.tencent.cloud.rpc.enhancement.webclient; +import java.io.UnsupportedEncodingException; +import java.net.SocketTimeoutException; +import java.net.URI; +import java.net.URLDecoder; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + import com.tencent.cloud.common.constant.HeaderConstant; import com.tencent.cloud.common.constant.RouterConstant; import com.tencent.cloud.common.metadata.MetadataContext; @@ -32,22 +40,15 @@ import com.tencent.polaris.discovery.client.api.DefaultConsumerAPI; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import reactor.core.publisher.Mono; +import reactor.util.context.Context; +import reactor.util.context.ContextView; + import org.springframework.http.HttpHeaders; import org.springframework.web.reactive.function.client.ClientRequest; import org.springframework.web.reactive.function.client.ClientResponse; import org.springframework.web.reactive.function.client.ExchangeFilterFunction; import org.springframework.web.reactive.function.client.ExchangeFunction; -import reactor.core.publisher.Mono; -import reactor.util.context.Context; -import reactor.util.context.ContextView; - -import java.io.UnsupportedEncodingException; -import java.net.SocketTimeoutException; -import java.net.URI; -import java.net.URLDecoder; -import java.util.Collection; -import java.util.List; -import java.util.Objects; import static com.tencent.cloud.common.constant.ContextConstant.UTF_8; @@ -68,6 +69,35 @@ public class EnhancedWebClientReporter extends AbstractPolarisReporterAdapter im this.consumerAPI = consumerAPI; } + private static RetStatus getRetStatusFromRequest(ClientResponse response, RetStatus defaultVal) { + HttpHeaders headers = response.headers().asHttpHeaders(); + if (headers.containsKey(HeaderConstant.INTERNAL_CALLEE_RET_STATUS)) { + List values = headers.get(HeaderConstant.INTERNAL_CALLEE_RET_STATUS); + if (CollectionUtils.isNotEmpty(values)) { + String retStatusVal = com.tencent.polaris.api.utils.StringUtils.defaultString(values.get(0)); + if (Objects.equals(retStatusVal, RetStatus.RetFlowControl.getDesc())) { + return RetStatus.RetFlowControl; + } + if (Objects.equals(retStatusVal, RetStatus.RetReject.getDesc())) { + return RetStatus.RetReject; + } + } + } + return defaultVal; + } + + private static String getActiveRuleNameFromRequest(ClientResponse response) { + HttpHeaders headers = response.headers().asHttpHeaders(); + if (headers.containsKey(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME)) { + List values = headers.get(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME); + if (CollectionUtils.isNotEmpty(values)) { + String val = com.tencent.polaris.api.utils.StringUtils.defaultString(values.get(0)); + return val; + } + } + return ""; + } + @Override public Mono filter(ClientRequest request, ExchangeFunction next) { return next.exchange(request).as((responseMono) -> instrumentResponse(request, responseMono)) @@ -97,7 +127,8 @@ public class EnhancedWebClientReporter extends AbstractPolarisReporterAdapter im String label = labels.iterator().next(); try { label = URLDecoder.decode(label, UTF_8); - } catch (UnsupportedEncodingException e) { + } + catch (UnsupportedEncodingException e) { LOGGER.error("unsupported charset exception " + UTF_8, e); } callResult.setLabels(convertLabel(label)); @@ -131,35 +162,6 @@ public class EnhancedWebClientReporter extends AbstractPolarisReporterAdapter im })); } - private static RetStatus getRetStatusFromRequest(ClientResponse response, RetStatus defaultVal) { - HttpHeaders headers = response.headers().asHttpHeaders(); - if (headers.containsKey(HeaderConstant.INTERNAL_CALLEE_RET_STATUS)) { - List values = headers.get(HeaderConstant.INTERNAL_CALLEE_RET_STATUS); - if (CollectionUtils.isNotEmpty(values)) { - String retStatusVal = com.tencent.polaris.api.utils.StringUtils.defaultString(values.get(0)); - if (Objects.equals(retStatusVal, RetStatus.RetFlowControl.getDesc())) { - return RetStatus.RetFlowControl; - } - if (Objects.equals(retStatusVal, RetStatus.RetReject.getDesc())) { - return RetStatus.RetReject; - } - } - } - return defaultVal; - } - - private static String getActiveRuleNameFromRequest(ClientResponse response) { - HttpHeaders headers = response.headers().asHttpHeaders(); - if (headers.containsKey(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME)) { - List values = headers.get(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME); - if (CollectionUtils.isNotEmpty(values)) { - String val = com.tencent.polaris.api.utils.StringUtils.defaultString(values.get(0)); - return val; - } - } - return ""; - } - private Long getStartTime(ContextView context) { return context.get(METRICS_WEBCLIENT_START_TIME); } diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ExceptionPolarisReporterTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ExceptionPolarisReporterTest.java index ed8986b0c..76da91405 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ExceptionPolarisReporterTest.java +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ExceptionPolarisReporterTest.java @@ -64,9 +64,8 @@ public class ExceptionPolarisReporterTest { @BeforeAll static void beforeAll() { - SDKContext context = ReporterUtilsTest.mockSDKContext(); mockedReporterUtils = Mockito.mockStatic(ReporterUtils.class); - mockedReporterUtils.when(() -> ReporterUtils.createServiceCallResult(context, any(Request.class), any(Response.class), anyLong(), any(RetStatus.class))) + mockedReporterUtils.when(() -> ReporterUtils.createServiceCallResult(any(SDKContext.class), any(Request.class), any(Response.class), anyLong(), any(RetStatus.class))) .thenReturn(mock(ServiceCallResult.class)); } diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/SuccessPolarisReporterTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/SuccessPolarisReporterTest.java index 07525ddef..9913f071d 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/SuccessPolarisReporterTest.java +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/SuccessPolarisReporterTest.java @@ -22,9 +22,6 @@ import java.util.HashMap; import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementReporterProperties; import com.tencent.cloud.rpc.enhancement.feign.plugin.EnhancedFeignContext; import com.tencent.cloud.rpc.enhancement.feign.plugin.EnhancedFeignPluginType; -import com.tencent.polaris.api.config.Configuration; -import com.tencent.polaris.api.config.global.APIConfig; -import com.tencent.polaris.api.config.global.GlobalConfig; import com.tencent.polaris.api.core.ConsumerAPI; import com.tencent.polaris.api.pojo.RetStatus; import com.tencent.polaris.api.rpc.ServiceCallResult; @@ -67,9 +64,8 @@ public class SuccessPolarisReporterTest { @BeforeAll static void beforeAll() { - SDKContext context = ReporterUtilsTest.mockSDKContext(); mockedReporterUtils = Mockito.mockStatic(ReporterUtils.class); - mockedReporterUtils.when(() -> ReporterUtils.createServiceCallResult(context, any(Request.class), any(Response.class), anyLong(), any(RetStatus.class))) + mockedReporterUtils.when(() -> ReporterUtils.createServiceCallResult(any(SDKContext.class), any(Request.class), any(Response.class), anyLong(), any(RetStatus.class))) .thenReturn(mock(ServiceCallResult.class)); }