From 3fd9947fa4240b116dd0297db1176a710d73e165 Mon Sep 17 00:00:00 2001 From: seanyu Date: Tue, 11 Apr 2023 10:55:43 +0800 Subject: [PATCH] fix scg start time err --- .../util/PolarisCircuitBreakerUtils.java | 2 +- .../RpcEnhancementAutoConfiguration.java | 6 --- .../scg/EnhancedPolarisGatewayReporter.java | 22 +++++---- .../RecordRequestStartTimeGlobalFilter.java | 46 ------------------- 4 files changed, 13 insertions(+), 63 deletions(-) delete mode 100644 spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/RecordRequestStartTimeGlobalFilter.java 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 d99b30448..961c30802 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 @@ -77,7 +77,7 @@ public final class PolarisCircuitBreakerUtils { if (Objects.nonNull(e.getFallbackInfo())) { result.setRetCode(e.getFallbackInfo().getCode()); } -// consumerAPI.updateServiceCallResult(result); + consumerAPI.updateServiceCallResult(result); } catch (Throwable ex) { LOG.error("[CircuitBreaker] report circuitbreaker call result fail ", ex); 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 0d751299e..521271b09 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 @@ -210,11 +210,5 @@ public class RpcEnhancementAutoConfiguration { return new EnhancedPolarisGatewayReporter(properties, context, consumerAPI, circuitBreakAPI); } - @Bean - @ConditionalOnClass(name = "org.springframework.cloud.gateway.filter.GlobalFilter") - public RecordRequestStartTimeGlobalFilter recordRequestStartTimeGlobalFilter() { - return new RecordRequestStartTimeGlobalFilter(); - } - } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/EnhancedPolarisGatewayReporter.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/EnhancedPolarisGatewayReporter.java index d81ef34b6..41c85ebfc 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/EnhancedPolarisGatewayReporter.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/EnhancedPolarisGatewayReporter.java @@ -32,11 +32,12 @@ import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.Response; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.web.server.ServerWebExchange; -import static com.tencent.cloud.rpc.enhancement.scg.RecordRequestStartTimeGlobalFilter.START_TIME; +import static org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter.ROUTE_TO_URL_FILTER_ORDER; import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_LOADBALANCER_RESPONSE_ATTR; /** @@ -44,7 +45,7 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.G * * @author sean yu */ -public class EnhancedPolarisGatewayReporter extends AbstractPolarisReporterAdapter implements GlobalFilter { +public class EnhancedPolarisGatewayReporter extends AbstractPolarisReporterAdapter implements GlobalFilter, Ordered { private static final Logger LOG = LoggerFactory.getLogger(EnhancedPolarisGatewayReporter.class); @@ -71,20 +72,17 @@ public class EnhancedPolarisGatewayReporter extends AbstractPolarisReporterAdapt if (!reportProperties.isEnabled()) { return chain.filter(exchange); } + long startTime = System.currentTimeMillis(); return chain.filter(exchange) - .doOnSuccess(v -> instrumentResponse(exchange, null)) - .doOnError(t -> instrumentResponse(exchange, t)); + .doOnSuccess(v -> instrumentResponse(exchange, null, startTime)) + .doOnError(t -> instrumentResponse(exchange, t, startTime)); } - private void instrumentResponse(ServerWebExchange exchange, Throwable t) { + private void instrumentResponse(ServerWebExchange exchange, Throwable t, long startTime) { ServerHttpResponse response = exchange.getResponse(); ServerHttpRequest request = exchange.getRequest(); - long delay = 0L; - Long startTime = exchange.getAttribute(START_TIME); - if (startTime != null) { - delay = System.currentTimeMillis() - startTime; - } + long delay = System.currentTimeMillis() - startTime; String serviceId = null; String targetHost = null; Integer targetPort = null; @@ -124,4 +122,8 @@ public class EnhancedPolarisGatewayReporter extends AbstractPolarisReporterAdapt circuitBreakAPI.report(resourceStat); } + @Override + public int getOrder() { + return ROUTE_TO_URL_FILTER_ORDER + 1; + } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/RecordRequestStartTimeGlobalFilter.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/RecordRequestStartTimeGlobalFilter.java deleted file mode 100644 index 9db3a4c07..000000000 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/scg/RecordRequestStartTimeGlobalFilter.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Spring Cloud Tencent available. - * - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software distributed - * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - * CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - */ - -package com.tencent.cloud.rpc.enhancement.scg; - -import reactor.core.publisher.Mono; - -import org.springframework.cloud.gateway.filter.GatewayFilterChain; -import org.springframework.cloud.gateway.filter.GlobalFilter; -import org.springframework.core.Ordered; -import org.springframework.web.server.ServerWebExchange; - -/** - * RecordRequestStartTimeGlobalFilter. - * - * @author sean yu - */ -public class RecordRequestStartTimeGlobalFilter implements GlobalFilter, Ordered { - - public static final String START_TIME = "START_TIME"; - - @Override - public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - exchange.getAttributes().put(START_TIME, System.currentTimeMillis()); - return chain.filter(exchange); - } - - @Override - public int getOrder() { - return Ordered.HIGHEST_PRECEDENCE; - } -}