From 266ee13bd2a488a43da0e1337aff748e0db3b448 Mon Sep 17 00:00:00 2001 From: SkyeBeFreeman <928016560@qq.com> Date: Fri, 13 May 2022 20:44:21 +0800 Subject: [PATCH] fix:fix wrong context data storage. --- CHANGELOG.md | 3 +- changes/changes-1.4.2.md | 5 ++ pom.xml | 2 +- .../DecodeTransferMetadataReactiveFilter.java | 2 +- .../DecodeTransferMetadataServletFilter.java | 2 +- ...odeTransferMedataFeignInterceptorTest.java | 7 +- ...sferMedataRestTemplateInterceptorTest.java | 7 +- .../feign/PolarisFeignClient.java | 27 ++++--- .../discovery/PolarisDiscoveryHandler.java | 4 -- .../polaris/registry/PolarisRegistration.java | 4 +- .../registry/PolarisServiceRegistry.java | 2 +- .../common/constant/MetadataConstant.java | 22 ------ .../common/metadata/MetadataContext.java | 35 ++-------- .../metadata/MetadataContextHolder.java | 7 +- .../config/MetadataAutoConfiguration.java | 31 -------- .../gateway/MetadataFirstScgFilter.java | 22 ------ .../gateway/MetadataFirstZuulFilter.java | 70 ------------------- .../feign/MetadataFirstFeignInterceptor.java | 55 --------------- .../metadata/MetadataContextHolderTest.java | 3 +- .../config/MetadataAutoConfigurationTest.java | 44 ++---------- spring-cloud-tencent-dependencies/pom.xml | 2 +- .../loadbalancer/PolarisLoadBalancer.java | 15 ++-- 22 files changed, 47 insertions(+), 324 deletions(-) create mode 100644 changes/changes-1.4.2.md delete mode 100644 spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/filter/gateway/MetadataFirstZuulFilter.java delete mode 100644 spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/interceptor/feign/MetadataFirstFeignInterceptor.java diff --git a/CHANGELOG.md b/CHANGELOG.md index af06c3331..85c31fadf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,4 @@ # Change Log --- -- [fix:fix routes of gateway doesn't refresh bug.](https://github.com/Tencent/spring-cloud-tencent/pull/158) -- [fix:Turn off automatic injection of Polars rule.](https://github.com/Tencent/spring-cloud-tencent/pull/162) +- [fix:fix wrong context data storage.](https://github.com/Tencent/spring-cloud-tencent/pull/170) diff --git a/changes/changes-1.4.2.md b/changes/changes-1.4.2.md new file mode 100644 index 000000000..af06c3331 --- /dev/null +++ b/changes/changes-1.4.2.md @@ -0,0 +1,5 @@ +# Change Log +--- + +- [fix:fix routes of gateway doesn't refresh bug.](https://github.com/Tencent/spring-cloud-tencent/pull/158) +- [fix:Turn off automatic injection of Polars rule.](https://github.com/Tencent/spring-cloud-tencent/pull/162) diff --git a/pom.xml b/pom.xml index fd263d077..6713a41d4 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ - 1.4.2-Hoxton.SR9 + 1.4.3-Hoxton.SR9-SNAPSHOT Hoxton.SR9 diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataReactiveFilter.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataReactiveFilter.java index aac449fac..2dea4fd66 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataReactiveFilter.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataReactiveFilter.java @@ -75,7 +75,7 @@ public class DecodeTransferMetadataReactiveFilter implements WebFilter, Ordered Map upstreamCustomMetadataMap = JacksonUtils .deserialize2Map(customMetadataStr); - MetadataContextHolder.init(upstreamCustomMetadataMap, null); + MetadataContextHolder.init(upstreamCustomMetadataMap); // Save to ServerWebExchange. serverWebExchange.getAttributes().put( diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataServletFilter.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataServletFilter.java index da1261f65..23934edec 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataServletFilter.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataServletFilter.java @@ -72,7 +72,7 @@ public class DecodeTransferMetadataServletFilter extends OncePerRequestFilter { .deserialize2Map(customMetadataStr); try { - MetadataContextHolder.init(upstreamCustomMetadataMap, null); + MetadataContextHolder.init(upstreamCustomMetadataMap); filterChain.doFilter(httpServletRequest, httpServletResponse); } diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/test/java/com/tencent/cloud/metadata/core/intercepter/EncodeTransferMedataFeignInterceptorTest.java b/spring-cloud-starter-tencent-metadata-transfer/src/test/java/com/tencent/cloud/metadata/core/intercepter/EncodeTransferMedataFeignInterceptorTest.java index cecb5ddbe..d71e93a64 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/test/java/com/tencent/cloud/metadata/core/intercepter/EncodeTransferMedataFeignInterceptorTest.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/test/java/com/tencent/cloud/metadata/core/intercepter/EncodeTransferMedataFeignInterceptorTest.java @@ -24,7 +24,6 @@ import java.net.URLDecoder; import com.tencent.cloud.common.constant.MetadataConstant; import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.metadata.config.MetadataLocalProperties; -import com.tencent.cloud.common.util.JacksonUtils; import com.tencent.cloud.metadata.core.EncodeTransferMedataFeignInterceptor; import feign.RequestInterceptor; import feign.RequestTemplate; @@ -67,7 +66,7 @@ public class EncodeTransferMedataFeignInterceptorTest { public void test1() { String metadata = testFeign.test(); Assertions.assertThat(metadata) - .isEqualTo("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}{}"); + .isEqualTo("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}"); Assertions.assertThat(metadataLocalProperties.getContent().get("a")) .isEqualTo("1"); Assertions.assertThat(metadataLocalProperties.getContent().get("b")) @@ -92,9 +91,7 @@ public class EncodeTransferMedataFeignInterceptorTest { public String test( @RequestHeader(MetadataConstant.HeaderName.CUSTOM_METADATA) String customMetadataStr) throws UnsupportedEncodingException { - String systemMetadataStr = JacksonUtils - .serialize2Json(MetadataContextHolder.get().getAllSystemMetadata()); - return URLDecoder.decode(customMetadataStr, "UTF-8") + systemMetadataStr; + return URLDecoder.decode(customMetadataStr, "UTF-8"); } @FeignClient(name = "test-feign", url = "http://localhost:8081") diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/test/java/com/tencent/cloud/metadata/core/intercepter/EncodeTransferMedataRestTemplateInterceptorTest.java b/spring-cloud-starter-tencent-metadata-transfer/src/test/java/com/tencent/cloud/metadata/core/intercepter/EncodeTransferMedataRestTemplateInterceptorTest.java index 6877842ac..733539df4 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/test/java/com/tencent/cloud/metadata/core/intercepter/EncodeTransferMedataRestTemplateInterceptorTest.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/test/java/com/tencent/cloud/metadata/core/intercepter/EncodeTransferMedataRestTemplateInterceptorTest.java @@ -24,7 +24,6 @@ import java.net.URLDecoder; import com.tencent.cloud.common.constant.MetadataConstant; import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.metadata.config.MetadataLocalProperties; -import com.tencent.cloud.common.util.JacksonUtils; import com.tencent.cloud.metadata.core.EncodeTransferMedataRestTemplateInterceptor; import org.assertj.core.api.Assertions; import org.junit.Test; @@ -77,7 +76,7 @@ public class EncodeTransferMedataRestTemplateInterceptorTest { httpEntity, String.class) .getBody(); Assertions.assertThat(metadata) - .isEqualTo("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}{}"); + .isEqualTo("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}"); Assertions.assertThat(metadataLocalProperties.getContent().get("a")) .isEqualTo("1"); Assertions.assertThat(metadataLocalProperties.getContent().get("b")) @@ -106,9 +105,7 @@ public class EncodeTransferMedataRestTemplateInterceptorTest { public String test( @RequestHeader(MetadataConstant.HeaderName.CUSTOM_METADATA) String customMetadataStr) throws UnsupportedEncodingException { - String systemMetadataStr = JacksonUtils - .serialize2Json(MetadataContextHolder.get().getAllSystemMetadata()); - return URLDecoder.decode(customMetadataStr, "UTF-8") + systemMetadataStr; + return URLDecoder.decode(customMetadataStr, "UTF-8"); } } diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClient.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClient.java index bb061b3b7..0996f0b21 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClient.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignClient.java @@ -20,9 +20,7 @@ package com.tencent.cloud.polaris.circuitbreaker.feign; import java.io.IOException; import java.net.URI; -import com.tencent.cloud.common.constant.MetadataConstant.SystemMetadataKey; import com.tencent.cloud.common.metadata.MetadataContext; -import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.polaris.api.core.ConsumerAPI; import com.tencent.polaris.api.pojo.RetStatus; import com.tencent.polaris.api.pojo.ServiceKey; @@ -32,6 +30,8 @@ import feign.Request; import feign.Request.Options; import feign.Response; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static feign.Util.checkNotNull; @@ -42,6 +42,9 @@ import static feign.Util.checkNotNull; */ public class PolarisFeignClient implements Client { + + private static final Logger LOG = LoggerFactory.getLogger(PolarisFeignClient.class); + private final Client delegate; private final ConsumerAPI consumerAPI; @@ -64,6 +67,7 @@ public class PolarisFeignClient implements Client { } catch (IOException origin) { resultRequest.setRetStatus(RetStatus.RetFail); + throw origin; } finally { @@ -74,24 +78,17 @@ public class PolarisFeignClient implements Client { private ServiceCallResult createServiceCallResult(final Request request) { ServiceCallResult resultRequest = new ServiceCallResult(); - MetadataContext metadataContext = MetadataContextHolder.get(); - String namespace = metadataContext - .getSystemMetadata(SystemMetadataKey.PEER_NAMESPACE); - resultRequest.setNamespace(namespace); - String serviceName = metadataContext - .getSystemMetadata(SystemMetadataKey.PEER_SERVICE); + resultRequest.setNamespace(MetadataContext.LOCAL_NAMESPACE); + String serviceName = request.requestTemplate().feignTarget().name(); resultRequest.setService(serviceName); - String method = metadataContext.getSystemMetadata(SystemMetadataKey.PEER_PATH); - resultRequest.setMethod(method); + URI uri = URI.create(request.url()); + resultRequest.setMethod(uri.getPath()); resultRequest.setRetStatus(RetStatus.RetSuccess); String sourceNamespace = MetadataContext.LOCAL_NAMESPACE; String sourceService = MetadataContext.LOCAL_SERVICE; - if (StringUtils.isNotBlank(sourceNamespace) - && StringUtils.isNotBlank(sourceService)) { - resultRequest - .setCallerService(new ServiceKey(sourceNamespace, sourceService)); + if (StringUtils.isNotBlank(sourceNamespace) && StringUtils.isNotBlank(sourceService)) { + resultRequest.setCallerService(new ServiceKey(sourceNamespace, sourceService)); } - URI uri = URI.create(request.url()); resultRequest.setHost(uri.getHost()); resultRequest.setPort(uri.getPort()); diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java index 86e829080..e71eb1fcd 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java @@ -20,7 +20,6 @@ package com.tencent.cloud.polaris.discovery; import java.util.Map; -import com.tencent.cloud.common.constant.MetadataConstant.SystemMetadataKey; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.polaris.PolarisDiscoveryProperties; @@ -70,9 +69,6 @@ public class PolarisDiscoveryHandler { GetInstancesRequest getInstancesRequest = new GetInstancesRequest(); getInstancesRequest.setNamespace(namespace); getInstancesRequest.setService(service); - String method = MetadataContextHolder.get() - .getSystemMetadata(SystemMetadataKey.PEER_PATH); - getInstancesRequest.setMethod(method); String localNamespace = MetadataContext.LOCAL_NAMESPACE; String localService = MetadataContext.LOCAL_SERVICE; Map allTransitiveCustomMetadata = MetadataContextHolder.get() diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java index 9ca6b9e08..ed8baacc9 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisRegistration.java @@ -19,9 +19,9 @@ package com.tencent.cloud.polaris.registry; import java.net.URI; +import java.util.Collections; import java.util.Map; -import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.polaris.DiscoveryPropertiesAutoConfiguration; import com.tencent.cloud.polaris.PolarisDiscoveryProperties; import com.tencent.polaris.client.api.SDKContext; @@ -84,7 +84,7 @@ public class PolarisRegistration implements Registration, ServiceInstance { @Override public Map getMetadata() { - return MetadataContextHolder.get().getAllSystemMetadata(); + return Collections.emptyMap(); } public PolarisDiscoveryProperties getPolarisProperties() { diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java index f12b50d9a..6b171c1de 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java @@ -206,7 +206,7 @@ public class PolarisServiceRegistry implements ServiceRegistry { // first. // If the health check passes, the heartbeat will be reported. // If it does not pass, the heartbeat will not be reported. - if (!StringUtils.isNotBlank(healthCheckEndpoint)) { + if (StringUtils.isNotBlank(healthCheckEndpoint)) { if (!healthCheckEndpoint.startsWith("/")) { healthCheckEndpoint = "/" + healthCheckEndpoint; } diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/MetadataConstant.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/MetadataConstant.java index ce498126b..d45c71568 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/MetadataConstant.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/MetadataConstant.java @@ -26,28 +26,6 @@ import org.springframework.core.Ordered; */ public final class MetadataConstant { - /** - * System metadata key. - */ - public static class SystemMetadataKey { - - /** - * Peer namespace. - */ - public static String PEER_NAMESPACE = "PEER_NAMESPACE"; - - /** - * Peer service. - */ - public static String PEER_SERVICE = "PEER_SERVICE"; - - /** - * Peer path. - */ - public static String PEER_PATH = "PEER_PATH"; - - } - /** * Order of filter, interceptor, ... */ diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java index 6f06e811b..584465ff9 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContext.java @@ -44,16 +44,6 @@ public class MetadataContext { */ public static String LOCAL_SERVICE; - /** - * Transitive custom metadata content. - */ - private final Map transitiveCustomMetadata; - - /** - * System metadata content. - */ - private final Map systemMetadata; - static { String namespace = ApplicationContextAwareUtils .getProperties("spring.cloud.polaris.namespace"); @@ -73,9 +63,13 @@ public class MetadataContext { LOCAL_SERVICE = serviceName; } + /** + * Transitive custom metadata content. + */ + private final Map transitiveCustomMetadata; + public MetadataContext() { this.transitiveCustomMetadata = new ConcurrentHashMap<>(); - this.systemMetadata = new ConcurrentHashMap<>(); } public Map getAllTransitiveCustomMetadata() { @@ -94,27 +88,10 @@ public class MetadataContext { this.transitiveCustomMetadata.putAll(customMetadata); } - public Map getAllSystemMetadata() { - return Collections.unmodifiableMap(this.systemMetadata); - } - - public String getSystemMetadata(String key) { - return this.systemMetadata.get(key); - } - - public void putSystemMetadata(String key, String value) { - this.systemMetadata.put(key, value); - } - - public void putAllSystemMetadata(Map systemMetadata) { - this.systemMetadata.putAll(systemMetadata); - } - @Override public String toString() { return "MetadataContext{" + "transitiveCustomMetadata=" - + JacksonUtils.serialize2Json(transitiveCustomMetadata) - + ", systemMetadata=" + JacksonUtils.serialize2Json(systemMetadata) + '}'; + + JacksonUtils.serialize2Json(transitiveCustomMetadata) + '}'; } } diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContextHolder.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContextHolder.java index b8811f8a5..3ec3eb7fc 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContextHolder.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/MetadataContextHolder.java @@ -92,10 +92,8 @@ public final class MetadataContextHolder { /** * Save metadata map to thread local. * @param customMetadataMap custom metadata collection - * @param systemMetadataMap system metadata collection */ - public static void init(Map customMetadataMap, - Map systemMetadataMap) { + public static void init(Map customMetadataMap) { // Init ThreadLocal. MetadataContextHolder.remove(); MetadataContext metadataContext = MetadataContextHolder.get(); @@ -104,9 +102,6 @@ public final class MetadataContextHolder { if (!CollectionUtils.isEmpty(customMetadataMap)) { metadataContext.putAllTransitiveCustomMetadata(customMetadataMap); } - if (!CollectionUtils.isEmpty(systemMetadataMap)) { - metadataContext.putAllSystemMetadata(systemMetadataMap); - } MetadataContextHolder.set(metadataContext); } diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/config/MetadataAutoConfiguration.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/config/MetadataAutoConfiguration.java index b0e85c4ae..6188c61ae 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/config/MetadataAutoConfiguration.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/config/MetadataAutoConfiguration.java @@ -18,10 +18,7 @@ package com.tencent.cloud.common.metadata.config; -import com.netflix.zuul.ZuulFilter; import com.tencent.cloud.common.metadata.filter.gateway.MetadataFirstScgFilter; -import com.tencent.cloud.common.metadata.filter.gateway.MetadataFirstZuulFilter; -import com.tencent.cloud.common.metadata.interceptor.feign.MetadataFirstFeignInterceptor; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.cloud.gateway.filter.GlobalFilter; @@ -45,34 +42,6 @@ public class MetadataAutoConfiguration { return new MetadataLocalProperties(); } - /** - * Create when Feign exists. - */ - @Configuration - @ConditionalOnClass(name = "feign.Feign") - static class MetadataFeignInterceptorConfig { - - @Bean - public MetadataFirstFeignInterceptor metadataFirstFeignInterceptor() { - return new MetadataFirstFeignInterceptor(); - } - - } - - /** - * Create when gateway application is Zuul. - */ - @Configuration - @ConditionalOnClass(name = "com.netflix.zuul.http.ZuulServlet") - static class MetadataZuulFilterConfig { - - @Bean - public ZuulFilter metadataFirstZuulFilter() { - return new MetadataFirstZuulFilter(); - } - - } - /** * Create when gateway application is SCG. */ diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/filter/gateway/MetadataFirstScgFilter.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/filter/gateway/MetadataFirstScgFilter.java index 21c6c4d54..a79ba5323 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/filter/gateway/MetadataFirstScgFilter.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/filter/gateway/MetadataFirstScgFilter.java @@ -25,12 +25,10 @@ import reactor.core.publisher.Mono; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; -import org.springframework.cloud.gateway.route.Route; import org.springframework.core.Ordered; import org.springframework.web.server.ServerWebExchange; import static org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter.ROUTE_TO_URL_FILTER_ORDER; -import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR; /** * Scg output first filter used for setting peer info in context. @@ -51,9 +49,6 @@ public class MetadataFirstScgFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - // get request context - Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR); - // get metadata of current thread MetadataContext metadataContext = exchange .getAttribute(MetadataConstant.HeaderName.METADATA_CONTEXT); @@ -61,23 +56,6 @@ public class MetadataFirstScgFilter implements GlobalFilter, Ordered { metadataContext = MetadataContextHolder.get(); } - // TODO The peer namespace is temporarily the same as the local namespace - metadataContext.putSystemMetadata( - MetadataConstant.SystemMetadataKey.PEER_NAMESPACE, - MetadataContext.LOCAL_NAMESPACE); - if (route != null) { - metadataContext.putSystemMetadata( - MetadataConstant.SystemMetadataKey.PEER_SERVICE, - route.getUri().getAuthority()); - } - else { - metadataContext.putSystemMetadata( - MetadataConstant.SystemMetadataKey.PEER_SERVICE, - exchange.getRequest().getURI().getAuthority()); - } - metadataContext.putSystemMetadata(MetadataConstant.SystemMetadataKey.PEER_PATH, - exchange.getRequest().getURI().getPath()); - exchange.getAttributes().put(MetadataConstant.HeaderName.METADATA_CONTEXT, metadataContext); diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/filter/gateway/MetadataFirstZuulFilter.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/filter/gateway/MetadataFirstZuulFilter.java deleted file mode 100644 index acb2acc87..000000000 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/filter/gateway/MetadataFirstZuulFilter.java +++ /dev/null @@ -1,70 +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.common.metadata.filter.gateway; - -import com.netflix.zuul.ZuulFilter; -import com.netflix.zuul.context.RequestContext; -import com.tencent.cloud.common.constant.MetadataConstant; -import com.tencent.cloud.common.metadata.MetadataContext; -import com.tencent.cloud.common.metadata.MetadataContextHolder; - -import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_DECORATION_FILTER_ORDER; -import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE; -import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.REQUEST_URI_KEY; -import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SERVICE_ID_KEY; - -/** - * Zuul output first filter used for setting peer info in context. - * - * @author Haotian Zhang - */ -public class MetadataFirstZuulFilter extends ZuulFilter { - - @Override - public String filterType() { - return PRE_TYPE; - } - - @Override - public int filterOrder() { - return PRE_DECORATION_FILTER_ORDER + 1; - } - - @Override - public boolean shouldFilter() { - return true; - } - - @Override - public Object run() { - // get request context - RequestContext requestContext = RequestContext.getCurrentContext(); - - // TODO The peer namespace is temporarily the same as the local namespace - MetadataContextHolder.get().putSystemMetadata( - MetadataConstant.SystemMetadataKey.PEER_NAMESPACE, - MetadataContext.LOCAL_NAMESPACE); - MetadataContextHolder.get().putSystemMetadata( - MetadataConstant.SystemMetadataKey.PEER_SERVICE, - (String) requestContext.get(SERVICE_ID_KEY)); - MetadataContextHolder.get().putSystemMetadata( - MetadataConstant.SystemMetadataKey.PEER_PATH, - (String) requestContext.get(REQUEST_URI_KEY)); - return null; - } - -} diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/interceptor/feign/MetadataFirstFeignInterceptor.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/interceptor/feign/MetadataFirstFeignInterceptor.java deleted file mode 100644 index 18f5390ab..000000000 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/interceptor/feign/MetadataFirstFeignInterceptor.java +++ /dev/null @@ -1,55 +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.common.metadata.interceptor.feign; - -import com.tencent.cloud.common.constant.MetadataConstant; -import com.tencent.cloud.common.metadata.MetadataContext; -import com.tencent.cloud.common.metadata.MetadataContextHolder; -import feign.RequestInterceptor; -import feign.RequestTemplate; - -import org.springframework.core.Ordered; - -/** - * Interceptor used for setting peer info in context. - * - * @author Haotian Zhang - */ -public class MetadataFirstFeignInterceptor implements RequestInterceptor, Ordered { - - @Override - public int getOrder() { - return MetadataConstant.OrderConstant.METADATA_FIRST_FEIGN_INTERCEPTOR_ORDER; - } - - @Override - public void apply(RequestTemplate requestTemplate) { - // get metadata of current thread - MetadataContext metadataContext = MetadataContextHolder.get(); - - // TODO The peer namespace is temporarily the same as the local namespace - metadataContext.putSystemMetadata( - MetadataConstant.SystemMetadataKey.PEER_NAMESPACE, - MetadataContext.LOCAL_NAMESPACE); - metadataContext.putSystemMetadata(MetadataConstant.SystemMetadataKey.PEER_SERVICE, - requestTemplate.feignTarget().name()); - metadataContext.putSystemMetadata(MetadataConstant.SystemMetadataKey.PEER_PATH, - requestTemplate.path()); - } - -} diff --git a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/MetadataContextHolderTest.java b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/MetadataContextHolderTest.java index 29d280044..0fbcf36ab 100644 --- a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/MetadataContextHolderTest.java +++ b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/MetadataContextHolderTest.java @@ -58,8 +58,7 @@ public class MetadataContextHolderTest { customMetadata.put("a", "1"); customMetadata.put("b", "22"); customMetadata.put("c", "3"); - Map systemMetadata = new HashMap<>(); - MetadataContextHolder.init(customMetadata, systemMetadata); + MetadataContextHolder.init(customMetadata); metadataContext = MetadataContextHolder.get(); customMetadata = metadataContext.getAllTransitiveCustomMetadata(); Assertions.assertThat(customMetadata.get("a")).isEqualTo("1"); diff --git a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/config/MetadataAutoConfigurationTest.java b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/config/MetadataAutoConfigurationTest.java index 76be75bd4..fb19efb18 100644 --- a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/config/MetadataAutoConfigurationTest.java +++ b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/config/MetadataAutoConfigurationTest.java @@ -19,8 +19,6 @@ package com.tencent.cloud.common.metadata.config; import com.tencent.cloud.common.metadata.filter.gateway.MetadataFirstScgFilter; -import com.tencent.cloud.common.metadata.filter.gateway.MetadataFirstZuulFilter; -import com.tencent.cloud.common.metadata.interceptor.feign.MetadataFirstFeignInterceptor; import org.assertj.core.api.Assertions; import org.junit.Test; @@ -50,20 +48,10 @@ public class MetadataAutoConfigurationTest { this.applicationContextRunner .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class)) .run(context -> { - Assertions.assertThat(context) - .hasSingleBean(MetadataLocalProperties.class); - Assertions.assertThat(context).hasSingleBean( - MetadataAutoConfiguration.MetadataFeignInterceptorConfig.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataFirstFeignInterceptor.class); - Assertions.assertThat(context).hasSingleBean( - MetadataAutoConfiguration.MetadataZuulFilterConfig.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataFirstZuulFilter.class); + Assertions.assertThat(context).hasSingleBean(MetadataLocalProperties.class); Assertions.assertThat(context).hasSingleBean( MetadataAutoConfiguration.MetadataScgFilterConfig.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataFirstScgFilter.class); + Assertions.assertThat(context).hasSingleBean(MetadataFirstScgFilter.class); }); } @@ -75,20 +63,10 @@ public class MetadataAutoConfigurationTest { this.webApplicationContextRunner .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class)) .run(context -> { - Assertions.assertThat(context) - .hasSingleBean(MetadataLocalProperties.class); - Assertions.assertThat(context).hasSingleBean( - MetadataAutoConfiguration.MetadataFeignInterceptorConfig.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataFirstFeignInterceptor.class); - Assertions.assertThat(context).hasSingleBean( - MetadataAutoConfiguration.MetadataZuulFilterConfig.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataFirstZuulFilter.class); + Assertions.assertThat(context).hasSingleBean(MetadataLocalProperties.class); Assertions.assertThat(context).hasSingleBean( MetadataAutoConfiguration.MetadataScgFilterConfig.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataFirstScgFilter.class); + Assertions.assertThat(context).hasSingleBean(MetadataFirstScgFilter.class); }); } @@ -100,20 +78,10 @@ public class MetadataAutoConfigurationTest { this.reactiveWebApplicationContextRunner .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class)) .run(context -> { - Assertions.assertThat(context) - .hasSingleBean(MetadataLocalProperties.class); - Assertions.assertThat(context).hasSingleBean( - MetadataAutoConfiguration.MetadataFeignInterceptorConfig.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataFirstFeignInterceptor.class); - Assertions.assertThat(context).hasSingleBean( - MetadataAutoConfiguration.MetadataZuulFilterConfig.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataFirstZuulFilter.class); + Assertions.assertThat(context).hasSingleBean(MetadataLocalProperties.class); Assertions.assertThat(context).hasSingleBean( MetadataAutoConfiguration.MetadataScgFilterConfig.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataFirstScgFilter.class); + Assertions.assertThat(context).hasSingleBean(MetadataFirstScgFilter.class); }); } diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml index b74474252..f67e0d517 100644 --- a/spring-cloud-tencent-dependencies/pom.xml +++ b/spring-cloud-tencent-dependencies/pom.xml @@ -70,7 +70,7 @@ - 1.4.2-Hoxton.SR9 + 1.4.3-Hoxton.SR9-SNAPSHOT 1.5.2 2.0.0 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 37ae60526..b9e0de6f1 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 @@ -30,7 +30,6 @@ import com.netflix.loadbalancer.PollingServerListUpdater; import com.netflix.loadbalancer.Server; import com.netflix.loadbalancer.ServerList; import com.tencent.cloud.common.constant.ContextConstant; -import com.tencent.cloud.common.constant.MetadataConstant.SystemMetadataKey; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.pojo.PolarisServer; @@ -89,9 +88,6 @@ public class PolarisLoadBalancer extends DynamicServerListLoadBalancer { String srcService = MetadataContext.LOCAL_SERVICE; Map transitiveCustomMetadata = MetadataContextHolder.get() .getAllTransitiveCustomMetadata(); - String method = MetadataContextHolder.get() - .getSystemMetadata(SystemMetadataKey.PEER_PATH); - processRoutersRequest.setMethod(method); if (StringUtils.isNotBlank(srcNamespace) && StringUtils.isNotBlank(srcService)) { ServiceInfo serviceInfo = new ServiceInfo(); serviceInfo.setNamespace(srcNamespace); @@ -111,14 +107,11 @@ public class PolarisLoadBalancer extends DynamicServerListLoadBalancer { } private ServiceInstances getPolarisDiscoveryServiceInstances() { - String serviceName = MetadataContextHolder.get().getSystemMetadata(SystemMetadataKey.PEER_SERVICE); - if (StringUtils.isBlank(serviceName)) { - List allServers = super.getAllServers(); - if (CollectionUtils.isEmpty(allServers)) { - return null; - } - serviceName = ((PolarisServer) super.getAllServers().get(0)).getServiceInstances().getService(); + List allServers = super.getAllServers(); + if (CollectionUtils.isEmpty(allServers)) { + return null; } + String serviceName = ((PolarisServer) super.getAllServers().get(0)).getServiceInstances().getService(); return getAllInstances(MetadataContext.LOCAL_NAMESPACE, serviceName).toServiceInstances(); }