diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-gateway-plugin/src/main/java/com/tencent/cloud/plugin/gateway/staining/TrafficStainingGatewayFilter.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-gateway-plugin/src/main/java/com/tencent/cloud/plugin/gateway/staining/TrafficStainingGatewayFilter.java index dda97563a..c6ddfd457 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-gateway-plugin/src/main/java/com/tencent/cloud/plugin/gateway/staining/TrafficStainingGatewayFilter.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-gateway-plugin/src/main/java/com/tencent/cloud/plugin/gateway/staining/TrafficStainingGatewayFilter.java @@ -26,6 +26,9 @@ import java.util.Map; import com.tencent.cloud.common.constant.MetadataConstant; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; +import com.tencent.cloud.common.util.JacksonUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; import org.springframework.cloud.gateway.filter.GatewayFilterChain; @@ -43,6 +46,8 @@ import static org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter.R */ public class TrafficStainingGatewayFilter implements GlobalFilter, Ordered { + private static final Logger LOGGER = LoggerFactory.getLogger(TrafficStainingGatewayFilter.class); + private final List trafficStainers; public TrafficStainingGatewayFilter(List trafficStainers) { @@ -87,13 +92,23 @@ public class TrafficStainingGatewayFilter implements GlobalFilter, Ordered { Map getStainedLabels(ServerWebExchange exchange) { Map stainedLabels = new HashMap<>(); int size = trafficStainers.size(); + TrafficStainer stainer = null; for (int i = size - 1; i >= 0; i--) { - TrafficStainer stainer = trafficStainers.get(i); - Map labels = stainer.apply(exchange); - if (!CollectionUtils.isEmpty(labels)) { - stainedLabels.putAll(labels); + try { + stainer = trafficStainers.get(i); + Map labels = stainer.apply(exchange); + if (!CollectionUtils.isEmpty(labels)) { + stainedLabels.putAll(labels); + } + } + catch (Exception e) { + if (stainer != null) { + LOGGER.error("[SCT] traffic stained error. stainer = {}", stainer.getClass().getName(), e); + } } } + LOGGER.debug("[SCT] traffic stained labels. {}", JacksonUtils.serialize2Json(stainedLabels)); + return stainedLabels; } diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-gateway-plugin/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-gateway-plugin/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 927618f86..a54b4b3fb 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-gateway-plugin/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-gateway-plugin/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -9,7 +9,7 @@ { "name": "spring.cloud.tencent.plugin.scg.staining.enabled", "type": "java.lang.Boolean", - "defaultValue": true, + "defaultValue": false, "description": "the switch for spring cloud gateway staining plugin." }, {