diff --git a/CHANGELOG.md b/CHANGELOG.md index 963543902..bd3f3e99b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,4 +9,5 @@ - [feature: improve circuit breaker usage.](https://github.com/Tencent/spring-cloud-tencent/pull/913) - [fix:fix nacos and consul registration.](https://github.com/Tencent/spring-cloud-tencent/pull/921) - [Documentation content changes: add circuitbreaker readme.](https://github.com/Tencent/spring-cloud-tencent/pull/930) -- [fix: fix PolarisRouterServiceInstanceListSupplier npe with reactive feign.](https://github.com/Tencent/spring-cloud-tencent/pull/926) \ No newline at end of file +- [fix: fix PolarisRouterServiceInstanceListSupplier npe with reactive feign.](https://github.com/Tencent/spring-cloud-tencent/pull/926) +- - [feat:support webclient and gateway report call metrics](https://github.com/Tencent/spring-cloud-tencent/pull/924) \ No newline at end of file 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 cb66e8fd5..c1af4af22 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 @@ -89,7 +89,7 @@ public final class PolarisCircuitBreakerUtils { consumerAPI.updateServiceCallResult(result); } catch (Throwable ex) { - LOG.error("[CircuitBreaker]"); + LOG.error("[CircuitBreaker] report circuitbreaker call result fail ", ex); } } diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-callee-service2/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-callee-service2/src/main/resources/bootstrap.yml index d18fd1bc9..54cb21355 100644 --- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-callee-service2/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-callee-service2/src/main/resources/bootstrap.yml @@ -5,7 +5,7 @@ spring: name: polaris-circuitbreaker-callee-service cloud: polaris: - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: default enabled: true stat: diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-feign-example/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-feign-example/src/main/resources/bootstrap.yml index b9f96cfa5..3378ae635 100644 --- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-feign-example/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-feign-example/src/main/resources/bootstrap.yml @@ -5,7 +5,7 @@ spring: name: polaris-circuitbreaker-feign-example cloud: polaris: - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: default enabled: true loadbalancer: diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-gateway-example/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-gateway-example/src/main/resources/bootstrap.yml index b81742992..650be3398 100644 --- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-gateway-example/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-gateway-example/src/main/resources/bootstrap.yml @@ -16,7 +16,7 @@ spring: feature-env: enabled: true polaris: - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: default enabled: true gateway: diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-resttemplate-example/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-resttemplate-example/src/main/resources/bootstrap.yml index d55f55bef..16fa8bd3b 100644 --- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-resttemplate-example/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-resttemplate-example/src/main/resources/bootstrap.yml @@ -5,7 +5,7 @@ spring: name: polaris-circuitbreaker-resttemplate-example cloud: polaris: - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: default enabled: true loadbalancer: diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-webclient-example/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-webclient-example/src/main/resources/bootstrap.yml index 2214999c2..f84dffdea 100644 --- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-webclient-example/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-webclient-example/src/main/resources/bootstrap.yml @@ -5,7 +5,7 @@ spring: name: polaris-circuitbreaker-webclient-example cloud: polaris: - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: default enabled: true loadbalancer: diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/resources/bootstrap.yml index 8d3a94e85..c6d40440f 100644 --- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/resources/bootstrap.yml @@ -10,5 +10,5 @@ spring: content: env: blue polaris: - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: default diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/resources/bootstrap.yml index 28a67e0cf..a0cf12581 100644 --- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/resources/bootstrap.yml @@ -10,5 +10,5 @@ spring: content: env: green polaris: - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: default diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/src/main/resources/bootstrap.yml index f21821c70..b0890b999 100644 --- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/src/main/resources/bootstrap.yml @@ -21,7 +21,7 @@ spring: transitive: - a polaris: - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: default enabled: true gateway: diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/README-zh.md b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/README-zh.md index eb80b2cc6..b03f25777 100644 --- a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/README-zh.md +++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/README-zh.md @@ -21,7 +21,7 @@ 1. 添加环境变量 - - 北极星服务端地址:polaris_address=grpc://127.0.0.1:8091 + - 北极星服务端地址:polaris_address=grpc://183.47.111.80:8091 - 可观测性PushGateway地址:prometheus_address=127.0.0.1:9091 2. 启动router-grayrelease-gateway应用 @@ -134,7 +134,7 @@ 1. 添加环境变量 - - 北极星服务端地址:polaris_address=grpc://127.0.0.1:8091 + - 北极星服务端地址:polaris_address=grpc://183.47.111.80:8091 - 可观测性PushGateway地址:prometheus_address=127.0.0.1:9091 - 环境标识:SCT_METADATA_CONTENT_env=blue - 透传环境标识:SCT_METADATA_CONTENT_TRANSITIVE=env @@ -148,7 +148,7 @@ 1. 添加环境变量 - - 北极星服务端地址:polaris_address=grpc://127.0.0.1:8091 + - 北极星服务端地址:polaris_address=grpc://183.47.111.80:8091 - 可观测性PushGateway地址:prometheus_address=127.0.0.1:9091 - 环境标识:SCT_METADATA_CONTENT_env=green - 透传环境标识:SCT_METADATA_CONTENT_TRANSITIVE=env @@ -161,7 +161,7 @@ 1. 添加环境变量 - - 北极星服务端地址:polaris_address=grpc://127.0.0.1:8091 + - 北极星服务端地址:polaris_address=grpc://183.47.111.80:8091 - 可观测性PushGateway地址:prometheus_address=127.0.0.1:9091 - 环境标识:SCT_METADATA_CONTENT_env=purple - 透传环境标识:SCT_METADATA_CONTENT_TRANSITIVE=env @@ -180,7 +180,7 @@ 1. 添加环境变量 - - 北极星服务端地址:polaris_address=grpc://127.0.0.1:8091 + - 北极星服务端地址:polaris_address=grpc://183.47.111.80:8091 - 可观测性PushGateway地址:prometheus_address=127.0.0.1:9091 - 环境标识:SCT_METADATA_CONTENT_env=blue - 透传环境标识:SCT_METADATA_CONTENT_TRANSITIVE=env @@ -195,7 +195,7 @@ 1. 添加环境变量 - - 北极星服务端地址:polaris_address=grpc://127.0.0.1:8091 + - 北极星服务端地址:polaris_address=grpc://183.47.111.80:8091 - 可观测性PushGateway地址:prometheus_address=127.0.0.1:9091 - 环境标识:SCT_METADATA_CONTENT_env=purple - 透传环境标识:SCT_METADATA_CONTENT_TRANSITIVE=env @@ -208,7 +208,7 @@ 1. 添加环境变量 - - 北极星服务端地址:polaris_address=grpc://127.0.0.1:8091 + - 北极星服务端地址:polaris_address=grpc://183.47.111.80:8091 - 可观测性PushGateway地址:prometheus_address=127.0.0.1:9091 - 环境标识:SCT_METADATA_CONTENT_env=blue - 透传环境标识:SCT_METADATA_CONTENT_TRANSITIVE=env @@ -222,7 +222,7 @@ 1. 添加环境变量 - - 北极星服务端地址:polaris_address=grpc://127.0.0.1:8091 + - 北极星服务端地址:polaris_address=grpc://183.47.111.80:8091 - 可观测性PushGateway地址:prometheus_address=127.0.0.1:9091 - 环境标识:SCT_METADATA_CONTENT_env=green - 透传环境标识:SCT_METADATA_CONTENT_TRANSITIVE=env diff --git a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/README.md b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/README.md index 4359bfcd8..4ec5129f2 100644 --- a/spring-cloud-tencent-examples/polaris-router-grayrelease-example/README.md +++ b/spring-cloud-tencent-examples/polaris-router-grayrelease-example/README.md @@ -21,7 +21,7 @@ Incoming requests dispatched from Gateway service to 3 environments: 1. add environment variables - - polaris server address: polaris_address=grpc://127.0.0.1:8091 + - polaris server address: polaris_address=grpc://183.47.111.80:8091 - pushgateway address: prometheus_address=127.0.0.1:9091 2. start router-grayrelease-gateway application @@ -134,7 +134,7 @@ Incoming requests dispatched from Gateway service to 3 environments: 1. add environment variables - - polaris server address: polaris_address=grpc://127.0.0.1:8091 + - polaris server address: polaris_address=grpc://183.47.111.80:8091 - pushgateway address: prometheus_address=127.0.0.1:9091 - env tag: SCT_METADATA_CONTENT_env=blue - transitive tag: SCT_METADATA_CONTENT_TRANSITIVE=env @@ -148,7 +148,7 @@ Incoming requests dispatched from Gateway service to 3 environments: 1. add environment variables - - polaris server address: polaris_address=grpc://127.0.0.1:8091 + - polaris server address: polaris_address=grpc://183.47.111.80:8091 - pushgateway address: prometheus_address=127.0.0.1:9091 - env tag: SCT_METADATA_CONTENT_env=green - transitive tag: SCT_METADATA_CONTENT_TRANSITIVE=env @@ -161,7 +161,7 @@ Incoming requests dispatched from Gateway service to 3 environments: 1. add environment variables - - polaris server address: polaris_address=grpc://127.0.0.1:8091 + - polaris server address: polaris_address=grpc://183.47.111.80:8091 - pushgateway address: prometheus_address=127.0.0.1:9091 - env tag: SCT_METADATA_CONTENT_env=purple - transitive tag: SCT_METADATA_CONTENT_TRANSITIVE=env @@ -180,7 +180,7 @@ You can find the instances with different tags in polaris console. 1. add environment variables - - polaris server address: polaris_address=grpc://127.0.0.1:8091 + - polaris server address: polaris_address=grpc://183.47.111.80:8091 - pushgateway address: prometheus_address=127.0.0.1:9091 - env tag: SCT_METADATA_CONTENT_env=blue - transitive tag: SCT_METADATA_CONTENT_TRANSITIVE=env @@ -194,7 +194,7 @@ You can find the instances with different tags in polaris console. 1. add environment variables - - polaris server address: polaris_address=grpc://127.0.0.1:8091 + - polaris server address: polaris_address=grpc://183.47.111.80:8091 - pushgateway address: prometheus_address=127.0.0.1:9091 - env tag: SCT_METADATA_CONTENT_env=purple - transitive tag: SCT_METADATA_CONTENT_TRANSITIVE=env @@ -207,7 +207,7 @@ You can find the instances with different tags in polaris console. 1. add environment variables - - polaris server address: polaris_address=grpc://127.0.0.1:8091 + - polaris server address: polaris_address=grpc://183.47.111.80:8091 - pushgateway address: prometheus_address=127.0.0.1:9091 - env tag: SCT_METADATA_CONTENT_env=blue - transitive tag: SCT_METADATA_CONTENT_TRANSITIVE=env @@ -221,7 +221,7 @@ You can find the instances with different tags in polaris console. 1. add environment variables - - polaris server address: polaris_address=grpc://127.0.0.1:8091 + - polaris server address: polaris_address=grpc://183.47.111.80:8091 - pushgateway address: prometheus_address=127.0.0.1:9091 - env tag: SCT_METADATA_CONTENT_env=green - transitive tag: SCT_METADATA_CONTENT_TRANSITIVE=env diff --git a/spring-cloud-tencent-polaris-context/src/test/resources/bootstrap.yml b/spring-cloud-tencent-polaris-context/src/test/resources/bootstrap.yml index c8ae7edeb..3c47dad06 100644 --- a/spring-cloud-tencent-polaris-context/src/test/resources/bootstrap.yml +++ b/spring-cloud-tencent-polaris-context/src/test/resources/bootstrap.yml @@ -2,7 +2,7 @@ spring: cloud: polaris: local-ip-address: 192.168.1.1 - address: grpc://127.0.0.1:8091 + address: grpc://183.47.111.80:8091 namespace: dev service: TestApp enabled: true diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/AbstractPolarisReporterAdapter.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/AbstractPolarisReporterAdapter.java index 877d17a22..d68b18752 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/AbstractPolarisReporterAdapter.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/AbstractPolarisReporterAdapter.java @@ -19,13 +19,18 @@ package com.tencent.cloud.rpc.enhancement; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Objects; +import com.tencent.cloud.common.constant.HeaderConstant; import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementReporterProperties; +import com.tencent.polaris.api.pojo.RetStatus; +import com.tencent.polaris.api.utils.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.lang.Nullable; @@ -76,6 +81,12 @@ public abstract class AbstractPolarisReporterAdapter { return new ArrayList<>(Arrays.asList(items)); } + public static String convertLabel(String label) { + label = label.replaceAll("\"|\\{|\\}", "") + .replaceAll(",", "|"); + return label; + } + /** * Callback after completion of request processing, Check if business meltdown reporting is required. * @@ -117,9 +128,30 @@ public abstract class AbstractPolarisReporterAdapter { return false; } - public static String convertLabel(String label) { - label = label.replaceAll("\"|\\{|\\}", "") - .replaceAll(",", "|"); - return label; + protected RetStatus getRetStatusFromRequest(HttpHeaders headers, RetStatus defaultVal) { + 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; + } + + protected String getActiveRuleNameFromRequest(HttpHeaders headers) { + if (headers.containsKey(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME)) { + Collection values = headers.get(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME); + if (CollectionUtils.isNotEmpty(values)) { + String val = com.tencent.polaris.api.utils.StringUtils.defaultString(new ArrayList<>(values).get(0)); + return val; + } + } + return ""; } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ExceptionPolarisReporter.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ExceptionPolarisReporter.java index be64928f5..dcfabc95c 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ExceptionPolarisReporter.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/ExceptionPolarisReporter.java @@ -18,7 +18,9 @@ package com.tencent.cloud.rpc.enhancement.feign.plugin.reporter; import java.net.SocketTimeoutException; +import java.util.ArrayList; +import com.tencent.cloud.rpc.enhancement.AbstractPolarisReporterAdapter; 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.EnhancedFeignPlugin; @@ -33,13 +35,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.Ordered; +import org.springframework.http.HttpHeaders; /** * Polaris reporter when feign call fails. * * @author Haotian Zhang */ -public class ExceptionPolarisReporter implements EnhancedFeignPlugin { +public class ExceptionPolarisReporter extends AbstractPolarisReporterAdapter implements EnhancedFeignPlugin { private static final Logger LOG = LoggerFactory.getLogger(ExceptionPolarisReporter.class); private final RpcEnhancementReporterProperties reporterProperties; @@ -48,9 +51,11 @@ public class ExceptionPolarisReporter implements EnhancedFeignPlugin { private final SDKContext context; + public ExceptionPolarisReporter(RpcEnhancementReporterProperties reporterProperties, SDKContext context, ConsumerAPI consumerAPI) { + super(reporterProperties); this.reporterProperties = reporterProperties; this.context = context; this.consumerAPI = consumerAPI; @@ -84,6 +89,11 @@ public class ExceptionPolarisReporter implements EnhancedFeignPlugin { LOG.debug("Will report result of {}. Request=[{} {}]. Response=[{}]. Delay=[{}]ms.", retStatus.name(), request.httpMethod() .name(), request.url(), response.status(), delay); ServiceCallResult resultRequest = ReporterUtils.createServiceCallResult(this.context, request, response, delay, retStatus); + + HttpHeaders headers = new HttpHeaders(); + response.headers().forEach((s, strings) -> headers.addAll(s, new ArrayList<>(strings))); + resultRequest.setRetStatus(getRetStatusFromRequest(headers, resultRequest.getRetStatus())); + resultRequest.setRuleName(getActiveRuleNameFromRequest(headers)); consumerAPI.updateServiceCallResult(resultRequest); } } 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 9db81834f..86830a276 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 @@ -20,11 +20,9 @@ package com.tencent.cloud.rpc.enhancement.feign.plugin.reporter; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLDecoder; -import java.util.ArrayList; import java.util.Collection; 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; import com.tencent.cloud.rpc.enhancement.AbstractPolarisReporterAdapter; @@ -75,7 +73,7 @@ public final class ReporterUtils { URI uri = URI.create(request.url()); resultRequest.setMethod(uri.getPath()); resultRequest.setRetCode(response.status()); - resultRequest.setRetStatus(getRetStatusFromRequest(response, retStatus)); + resultRequest.setRetStatus(retStatus); resultRequest.setDelay(delay); String sourceNamespace = MetadataContext.LOCAL_NAMESPACE; String sourceService = MetadataContext.LOCAL_SERVICE; @@ -85,10 +83,6 @@ public final class ReporterUtils { if (Objects.nonNull(context)) { resultRequest.setCallerIp(context.getConfig().getGlobal().getAPI().getBindIP()); } - String ruleName = getActiveRuleNameFromRequest(response); - if (StringUtils.isNotBlank(ruleName)) { - resultRequest.setRuleName(ruleName); - } resultRequest.setHost(uri.getHost()); // -1 means access directly by url, and use http default port number 80 resultRequest.setPort(uri.getPort() == -1 ? 80 : uri.getPort()); @@ -96,30 +90,4 @@ public final class ReporterUtils { return resultRequest; } - private static RetStatus getRetStatusFromRequest(Response response, RetStatus defaultVal) { - if (response.headers().containsKey(HeaderConstant.INTERNAL_CALLEE_RET_STATUS)) { - Collection values = response.headers().get(HeaderConstant.INTERNAL_CALLEE_RET_STATUS); - if (CollectionUtils.isNotEmpty(values)) { - String retStatusVal = com.tencent.polaris.api.utils.StringUtils.defaultString(new ArrayList<>(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(Response response) { - if (response.headers().containsKey(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME)) { - Collection values = response.headers().get(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME); - if (CollectionUtils.isNotEmpty(values)) { - String val = com.tencent.polaris.api.utils.StringUtils.defaultString(new ArrayList<>(values).get(0)); - return val; - } - } - return ""; - } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/SuccessPolarisReporter.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/SuccessPolarisReporter.java index 4bfc9dd39..4700fdba5 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/SuccessPolarisReporter.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/feign/plugin/reporter/SuccessPolarisReporter.java @@ -17,6 +17,8 @@ package com.tencent.cloud.rpc.enhancement.feign.plugin.reporter; +import java.util.ArrayList; + import com.tencent.cloud.rpc.enhancement.AbstractPolarisReporterAdapter; import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementReporterProperties; import com.tencent.cloud.rpc.enhancement.feign.plugin.EnhancedFeignContext; @@ -32,6 +34,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.Ordered; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; /** @@ -80,6 +83,10 @@ public class SuccessPolarisReporter extends AbstractPolarisReporterAdapter imple LOG.debug("Will report result of {}. Request=[{} {}]. Response=[{}]. Delay=[{}]ms.", retStatus.name(), request.httpMethod() .name(), request.url(), response.status(), delay); ServiceCallResult resultRequest = ReporterUtils.createServiceCallResult(this.context, request, response, delay, retStatus); + HttpHeaders headers = new HttpHeaders(); + response.headers().forEach((s, strings) -> headers.addAll(s, new ArrayList<>(strings))); + resultRequest.setRetStatus(getRetStatusFromRequest(headers, resultRequest.getRetStatus())); + resultRequest.setRuleName(getActiveRuleNameFromRequest(headers)); consumerAPI.updateServiceCallResult(resultRequest); } } 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 affb876f5..9d3039cce 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 @@ -21,13 +21,10 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Map; 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; import com.tencent.cloud.common.metadata.MetadataContextHolder; @@ -156,8 +153,8 @@ public class EnhancedRestTemplateReporter extends AbstractPolarisReporterAdapter if (apply(response.getStatusCode())) { resultRequest.setRetStatus(RetStatus.RetFail); } - resultRequest.setRetStatus(getRetStatusFromRequest(response, resultRequest.getRetStatus())); - resultRequest.setRuleName(getActiveRuleNameFromRequest(response)); + resultRequest.setRetStatus(getRetStatusFromRequest(response.getHeaders(), resultRequest.getRetStatus())); + resultRequest.setRuleName(getActiveRuleNameFromRequest(response.getHeaders())); if (Objects.nonNull(context)) { resultRequest.setCallerIp(context.getConfig().getGlobal().getAPI().getBindIP()); } @@ -234,30 +231,4 @@ public class EnhancedRestTemplateReporter extends AbstractPolarisReporterAdapter this.delegateHandler = delegateHandler; } - private static RetStatus getRetStatusFromRequest(ClientHttpResponse response, RetStatus defaultVal) { - if (response.getHeaders().containsKey(HeaderConstant.INTERNAL_CALLEE_RET_STATUS)) { - List values = response.getHeaders().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(ClientHttpResponse response) { - if (response.getHeaders().containsKey(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME)) { - Collection values = response.getHeaders().get(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME); - if (CollectionUtils.isNotEmpty(values)) { - String val = com.tencent.polaris.api.utils.StringUtils.defaultString(new ArrayList<>(values).get(0)); - return val; - } - } - return ""; - } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/EnhancedPolarisHttpClient.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/EnhancedPolarisHttpClient.java index f83ba6f1d..ec68806b9 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/EnhancedPolarisHttpClient.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/EnhancedPolarisHttpClient.java @@ -71,7 +71,10 @@ public class EnhancedPolarisHttpClient extends HttpClient { .code()))) { status = RetStatus.RetFail; } - status = getRetStatusFromRequest(responseHeaders, status); + org.springframework.http.HttpHeaders headers = new org.springframework.http.HttpHeaders(); + responseHeaders.forEach(entry -> headers.add(entry.getKey(), entry.getValue())); + status = adapter.getRetStatusFromRequest(headers, status); + result.setRuleName(adapter.getActiveRuleNameFromRequest(headers)); } else { if (throwable instanceof SocketTimeoutException) { @@ -80,7 +83,6 @@ public class EnhancedPolarisHttpClient extends HttpClient { } result.setMethod(httpClientResponse.uri()); result.setRetCode(httpClientResponse.status().code()); - result.setRuleName(getActiveRuleNameFromRequest(responseHeaders)); result.setRetStatus(status); if (Objects.nonNull(context)) { result.setCallerIp(context.getConfig().getGlobal().getAPI().getBindIP()); @@ -103,27 +105,6 @@ public class EnhancedPolarisHttpClient extends HttpClient { this.registerReportHandler(); } - private static RetStatus getRetStatusFromRequest(HttpHeaders headers, RetStatus defaultVal) { - if (headers.contains(HeaderConstant.INTERNAL_CALLEE_RET_STATUS)) { - String retStatusVal = headers.get(HeaderConstant.INTERNAL_CALLEE_RET_STATUS); - 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(HttpHeaders headers) { - if (headers.contains(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME)) { - String val = headers.get(HeaderConstant.INTERNAL_ACTIVE_RULE_NAME); - return val; - } - return ""; - } - @Override public HttpClientConfig configuration() { return target.configuration(); @@ -173,6 +154,16 @@ public class EnhancedPolarisHttpClient extends HttpClient { public boolean apply(HttpStatus httpStatus) { return super.apply(httpStatus); } + + @Override + public RetStatus getRetStatusFromRequest(org.springframework.http.HttpHeaders headers, RetStatus defaultVal) { + return super.getRetStatusFromRequest(headers, defaultVal); + } + + @Override + public String getActiveRuleNameFromRequest(org.springframework.http.HttpHeaders headers) { + return super.getActiveRuleNameFromRequest(headers); + } } } 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 766bea43f..60c30c905 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 @@ -22,7 +22,6 @@ 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; @@ -69,35 +68,6 @@ 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)) @@ -144,11 +114,13 @@ public class EnhancedWebClientReporter extends AbstractPolarisReporterAdapter im RetStatus retStatus = RetStatus.RetSuccess; ClientResponse response = signal.get(); if (Objects.nonNull(response)) { - callResult.setRuleName(getActiveRuleNameFromRequest(response)); + HttpHeaders headers = response.headers().asHttpHeaders(); + + callResult.setRuleName(getActiveRuleNameFromRequest(headers)); if (apply(response.statusCode())) { retStatus = RetStatus.RetFail; } - retStatus = getRetStatusFromRequest(response, retStatus); + retStatus = getRetStatusFromRequest(headers, retStatus); } if (signal.isOnError()) { Throwable throwable = signal.getThrowable();