From 7ee56fd58d527fb3e5625c10b7a8b0c48b9b9873 Mon Sep 17 00:00:00 2001 From: SkyeBeFreeman <928016560@qq.com> Date: Tue, 17 May 2022 15:29:47 +0800 Subject: [PATCH] fix:fix wrong context data storage. --- CHANGELOG.md | 7 +-- changes/changes-1.4.2.md | 9 ++++ pom.xml | 2 +- .../DecodeTransferMetadataReactiveFilter.java | 2 +- .../DecodeTransferMetadataServletFilter.java | 2 +- ...odeTransferMedataFeignInterceptorTest.java | 41 ++++++++------ ...sferMedataRestTemplateInterceptorTest.java | 36 ++++++++----- .../feign/PolarisFeignClient.java | 13 ++--- .../discovery/PolarisDiscoveryHandler.java | 6 +-- .../polaris/registry/PolarisRegistration.java | 4 +- .../common/constant/MetadataConstant.java | 22 -------- .../common/metadata/MetadataContext.java | 48 ++++++----------- .../metadata/MetadataContextHolder.java | 17 +++--- .../config/MetadataAutoConfiguration.java | 15 ------ .../gateway/MetadataFirstScgFilter.java | 25 ++------- .../feign/MetadataFirstFeignInterceptor.java | 53 ------------------- .../metadata/MetadataContextHolderTest.java | 3 +- .../config/MetadataAutoConfigurationTest.java | 37 +++++-------- spring-cloud-tencent-dependencies/pom.xml | 2 +- ...balancer.java => PolarisLoadBalancer.java} | 6 +-- .../PolarisServiceInstanceListSupplier.java | 3 -- ...olarisLoadBalancerClientConfiguration.java | 4 +- 22 files changed, 116 insertions(+), 241 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/interceptor/feign/MetadataFirstFeignInterceptor.java rename spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/{PolarisLoadbalancer.java => PolarisLoadBalancer.java} (96%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7db7eb18..1234e8fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,4 @@ # Change Log --- -- [Feature: Support custom rate limit reject response info](https://github.com/Tencent/spring-cloud-tencent/pull/153) -- [Feature: Remove spring-javaformat-maven-plugin](https://github.com/Tencent/spring-cloud-tencent/pull/151) -- [feat:optimize config server address.](https://github.com/Tencent/spring-cloud-tencent/pull/149) -- [feat: override recover router config](https://github.com/Tencent/spring-cloud-tencent/pull/159) -- [feat:refactor loadbalancer module as a basic module for router and circuit breaker.](https://github.com/Tencent/spring-cloud-tencent/pull/155) -- [fix:fix routes of gateway doesn't refresh bug.](https://github.com/Tencent/spring-cloud-tencent/pull/163) +- [fix:fix wrong context data storage.](https://github.com/Tencent/spring-cloud-tencent/pull/176) diff --git a/changes/changes-1.4.2.md b/changes/changes-1.4.2.md new file mode 100644 index 00000000..967bd597 --- /dev/null +++ b/changes/changes-1.4.2.md @@ -0,0 +1,9 @@ +# Change Log +--- + +- [Feature: Support custom rate limit reject response info](https://github.com/Tencent/spring-cloud-tencent/pull/153) +- [Feature: Remove spring-javaformat-maven-plugin](https://github.com/Tencent/spring-cloud-tencent/pull/151) +- [feat:optimize config server address.](https://github.com/Tencent/spring-cloud-tencent/pull/149) +- [feat: override recover router config](https://github.com/Tencent/spring-cloud-tencent/pull/159) +- [feat:refactor loadbalancer module as a basic module for router and circuit breaker.](https://github.com/Tencent/spring-cloud-tencent/pull/155) +- [fix:fix routes of gateway doesn't refresh bug.](https://github.com/Tencent/spring-cloud-tencent/pull/163) \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8abe0aea..d3f6461e 100644 --- a/pom.xml +++ b/pom.xml @@ -86,7 +86,7 @@ - 1.4.2-2020.0.5 + 1.4.3-2020.0.5-SNAPSHOT 2020.0.5 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 9817b9f8..b834089d 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 @@ -71,7 +71,7 @@ public class DecodeTransferMetadataReactiveFilter implements WebFilter, Ordered // create custom metadata. Map upstreamCustomMetadataMap = JacksonUtils.deserialize2Map(customMetadataStr); - MetadataContextHolder.init(upstreamCustomMetadataMap, null); + MetadataContextHolder.init(upstreamCustomMetadataMap); // Save to ServerWebExchange. serverWebExchange.getAttributes().put(MetadataConstant.HeaderName.METADATA_CONTEXT, 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 56968a6b..39ce1e02 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 @@ -68,7 +68,7 @@ public class DecodeTransferMetadataServletFilter extends OncePerRequestFilter { Map upstreamCustomMetadataMap = JacksonUtils.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 65e5b0e7..9709602b 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 @@ -25,7 +25,6 @@ import java.util.stream.Collectors; 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; @@ -52,13 +51,15 @@ import org.springframework.web.bind.annotation.RestController; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.DEFINED_PORT; /** - * Test for {@link EncodeTransferMedataFeignInterceptor} + * Test for {@link EncodeTransferMedataFeignInterceptor}. * * @author Haotian Zhang */ @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = DEFINED_PORT, classes = EncodeTransferMedataFeignInterceptorTest.TestApplication.class, - properties = { "server.port=8081", "spring.config.location = classpath:application-test.yml" }) +@SpringBootTest(webEnvironment = DEFINED_PORT, + classes = EncodeTransferMedataFeignInterceptorTest.TestApplication.class, + properties = { "server.port=8081", + "spring.config.location = classpath:application-test.yml" }) public class EncodeTransferMedataFeignInterceptorTest { @Autowired @@ -70,12 +71,21 @@ public class EncodeTransferMedataFeignInterceptorTest { @Test public void test1() { String metadata = testFeign.test(); - Assertions.assertThat(metadata).isEqualTo("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}{}"); - Assertions.assertThat(metadataLocalProperties.getContent().get("a")).isEqualTo("1"); - Assertions.assertThat(metadataLocalProperties.getContent().get("b")).isEqualTo("2"); - Assertions.assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("a")).isEqualTo("11"); - Assertions.assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("b")).isEqualTo("22"); - Assertions.assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("c")).isEqualTo("33"); + Assertions.assertThat(metadata) + .isEqualTo("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}"); + Assertions.assertThat(metadataLocalProperties.getContent().get("a")) + .isEqualTo("1"); + Assertions.assertThat(metadataLocalProperties.getContent().get("b")) + .isEqualTo("2"); + Assertions + .assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("a")) + .isEqualTo("11"); + Assertions + .assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("b")) + .isEqualTo("22"); + Assertions + .assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("c")) + .isEqualTo("33"); } @SpringBootApplication @@ -84,10 +94,10 @@ public class EncodeTransferMedataFeignInterceptorTest { protected static class TestApplication { @RequestMapping("/test") - public String test(@RequestHeader(MetadataConstant.HeaderName.CUSTOM_METADATA) String customMetadataStr) + 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"); } @Bean @@ -99,8 +109,9 @@ public class EncodeTransferMedataFeignInterceptorTest { @FeignClient(name = "test-feign", url = "http://localhost:8081") public interface TestFeign { - @RequestMapping(value = "/test", headers = { - MetadataConstant.HeaderName.CUSTOM_METADATA + "={\"a\":\"11" + "\",\"b\":\"22\",\"c\":\"33\"}" }) + @RequestMapping(value = "/test", + headers = { MetadataConstant.HeaderName.CUSTOM_METADATA + + "={\"a\":\"11" + "\",\"b\":\"22\",\"c\":\"33\"}" }) String test(); } 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 6046651a..733539df 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; @@ -47,7 +46,7 @@ import org.springframework.web.client.RestTemplate; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; /** - * Test for {@link EncodeTransferMedataRestTemplateInterceptor} + * Test for {@link EncodeTransferMedataRestTemplateInterceptor}. * * @author Haotian Zhang */ @@ -69,17 +68,28 @@ public class EncodeTransferMedataRestTemplateInterceptorTest { @Test public void test1() { HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.set(MetadataConstant.HeaderName.CUSTOM_METADATA, "{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}"); + httpHeaders.set(MetadataConstant.HeaderName.CUSTOM_METADATA, + "{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}"); HttpEntity httpEntity = new HttpEntity<>(httpHeaders); String metadata = restTemplate - .exchange("http://localhost:" + localServerPort + "/test", HttpMethod.GET, httpEntity, String.class) + .exchange("http://localhost:" + localServerPort + "/test", HttpMethod.GET, + httpEntity, String.class) .getBody(); - Assertions.assertThat(metadata).isEqualTo("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}{}"); - Assertions.assertThat(metadataLocalProperties.getContent().get("a")).isEqualTo("1"); - Assertions.assertThat(metadataLocalProperties.getContent().get("b")).isEqualTo("2"); - Assertions.assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("a")).isEqualTo("11"); - Assertions.assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("b")).isEqualTo("22"); - Assertions.assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("c")).isEqualTo("33"); + Assertions.assertThat(metadata) + .isEqualTo("{\"a\":\"11\",\"b\":\"22\",\"c\":\"33\"}"); + Assertions.assertThat(metadataLocalProperties.getContent().get("a")) + .isEqualTo("1"); + Assertions.assertThat(metadataLocalProperties.getContent().get("b")) + .isEqualTo("2"); + Assertions + .assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("a")) + .isEqualTo("11"); + Assertions + .assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("b")) + .isEqualTo("22"); + Assertions + .assertThat(MetadataContextHolder.get().getTransitiveCustomMetadata("c")) + .isEqualTo("33"); } @SpringBootApplication @@ -92,10 +102,10 @@ public class EncodeTransferMedataRestTemplateInterceptorTest { } @RequestMapping("/test") - public String test(@RequestHeader(MetadataConstant.HeaderName.CUSTOM_METADATA) String customMetadataStr) + 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 f5a26b9c..c5394233 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; @@ -74,20 +72,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)); } - 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 53190bf2..e71eb1fc 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,11 +69,10 @@ 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().getAllTransitiveCustomMetadata(); + Map allTransitiveCustomMetadata = MetadataContextHolder.get() + .getAllTransitiveCustomMetadata(); if (StringUtils.isNotBlank(localNamespace) || StringUtils.isNotBlank(localService) || null != allTransitiveCustomMetadata) { ServiceInfo sourceService = new ServiceInfo(); 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 c9d0e117..8af15b9e 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; @@ -82,7 +82,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-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 44566bfc..e28c4304 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 95130011..977db5df 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 @@ -24,7 +24,8 @@ import java.util.concurrent.ConcurrentHashMap; import com.tencent.cloud.common.util.ApplicationContextAwareUtils; import com.tencent.cloud.common.util.JacksonUtils; -import org.apache.commons.lang.StringUtils; + +import org.springframework.util.StringUtils; /** * Metadata Context. @@ -44,17 +45,20 @@ public class MetadataContext { public static String LOCAL_SERVICE; static { - String namespace = ApplicationContextAwareUtils.getProperties("spring.cloud.polaris.namespace"); - if (StringUtils.isBlank(namespace)) { - namespace = ApplicationContextAwareUtils.getProperties("spring.cloud.polaris.discovery.namespace", - "default"); + String namespace = ApplicationContextAwareUtils + .getProperties("spring.cloud.polaris.namespace"); + if (!StringUtils.hasText(namespace)) { + namespace = ApplicationContextAwareUtils + .getProperties("spring.cloud.polaris.discovery.namespace", "default"); } LOCAL_NAMESPACE = namespace; - String serviceName = ApplicationContextAwareUtils.getProperties("spring.cloud.polaris.service"); - if (StringUtils.isBlank(serviceName)) { - serviceName = ApplicationContextAwareUtils.getProperties("spring.cloud.polaris.discovery.service", - ApplicationContextAwareUtils.getProperties("spring.application.name", null)); + String serviceName = ApplicationContextAwareUtils + .getProperties("spring.cloud.polaris.service"); + if (!StringUtils.hasText(serviceName)) { + serviceName = ApplicationContextAwareUtils.getProperties( + "spring.cloud.polaris.discovery.service", ApplicationContextAwareUtils + .getProperties("spring.application.name", null)); } LOCAL_SERVICE = serviceName; } @@ -64,14 +68,8 @@ public class MetadataContext { */ private final Map transitiveCustomMetadata; - /** - * System metadata content. - */ - private final Map systemMetadata; - public MetadataContext() { this.transitiveCustomMetadata = new ConcurrentHashMap<>(); - this.systemMetadata = new ConcurrentHashMap<>(); } public Map getAllTransitiveCustomMetadata() { @@ -90,26 +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) + '}'; + return "MetadataContext{" + "transitiveCustomMetadata=" + + 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 3f2fc276..3ec3eb7f 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 @@ -49,12 +49,13 @@ public final class MetadataContextHolder { if (null == METADATA_CONTEXT.get()) { MetadataContext metadataContext = new MetadataContext(); if (metadataLocalProperties == null) { - metadataLocalProperties = (MetadataLocalProperties) ApplicationContextAwareUtils.getApplicationContext() - .getBean("metadataLocalProperties"); + metadataLocalProperties = (MetadataLocalProperties) ApplicationContextAwareUtils + .getApplicationContext().getBean("metadataLocalProperties"); } // init custom metadata and load local metadata - Map transitiveMetadataMap = getTransitiveMetadataMap(metadataLocalProperties.getContent(), + Map transitiveMetadataMap = getTransitiveMetadataMap( + metadataLocalProperties.getContent(), metadataLocalProperties.getTransitive()); metadataContext.putAllTransitiveCustomMetadata(transitiveMetadataMap); @@ -69,8 +70,8 @@ public final class MetadataContextHolder { * @param transitiveMetadataKeyList transitive metadata name list * @return result */ - private static Map getTransitiveMetadataMap(Map source, - List transitiveMetadataKeyList) { + private static Map getTransitiveMetadataMap( + Map source, List transitiveMetadataKeyList) { Map result = new HashMap<>(); for (String key : transitiveMetadataKeyList) { if (source.containsKey(key)) { @@ -91,9 +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(); @@ -102,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 e8f29d72..6188c61a 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 @@ -19,7 +19,6 @@ package com.tencent.cloud.common.metadata.config; import com.tencent.cloud.common.metadata.filter.gateway.MetadataFirstScgFilter; -import com.tencent.cloud.common.metadata.interceptor.feign.MetadataFirstFeignInterceptor; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.cloud.gateway.filter.GlobalFilter; @@ -43,20 +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 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 ca8f90b8..a79ba532 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,30 +49,15 @@ 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); + MetadataContext metadataContext = exchange + .getAttribute(MetadataConstant.HeaderName.METADATA_CONTEXT); if (metadataContext == null) { 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); + exchange.getAttributes().put(MetadataConstant.HeaderName.METADATA_CONTEXT, + metadataContext); return chain.filter(exchange); } 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 e503a6b8..00000000 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/interceptor/feign/MetadataFirstFeignInterceptor.java +++ /dev/null @@ -1,53 +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 6883ae50..3ef3981b 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 9f59d089..fb19efb1 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,7 +19,6 @@ package com.tencent.cloud.common.metadata.config; import com.tencent.cloud.common.metadata.filter.gateway.MetadataFirstScgFilter; -import com.tencent.cloud.common.metadata.interceptor.feign.MetadataFirstFeignInterceptor; import org.assertj.core.api.Assertions; import org.junit.Test; @@ -29,7 +28,7 @@ import org.springframework.boot.test.context.runner.ReactiveWebApplicationContex import org.springframework.boot.test.context.runner.WebApplicationContextRunner; /** - * Test for {@link MetadataAutoConfiguration} + * Test for {@link MetadataAutoConfiguration}. * * @author Haotian Zhang */ @@ -46,16 +45,12 @@ public class MetadataAutoConfigurationTest { */ @Test public void test1() { - this.applicationContextRunner.withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class)) + 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(MetadataAutoConfiguration.MetadataFeignInterceptorConfig.class); - Assertions.assertThat(context).hasSingleBean(MetadataFirstFeignInterceptor.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataAutoConfiguration.MetadataScgFilterConfig.class); + Assertions.assertThat(context).hasSingleBean( + MetadataAutoConfiguration.MetadataScgFilterConfig.class); Assertions.assertThat(context).hasSingleBean(MetadataFirstScgFilter.class); }); } @@ -65,16 +60,12 @@ public class MetadataAutoConfigurationTest { */ @Test public void test2() { - this.webApplicationContextRunner.withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class)) + 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(MetadataAutoConfiguration.MetadataFeignInterceptorConfig.class); - Assertions.assertThat(context).hasSingleBean(MetadataFirstFeignInterceptor.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataAutoConfiguration.MetadataScgFilterConfig.class); + Assertions.assertThat(context).hasSingleBean( + MetadataAutoConfiguration.MetadataScgFilterConfig.class); Assertions.assertThat(context).hasSingleBean(MetadataFirstScgFilter.class); }); } @@ -85,13 +76,11 @@ public class MetadataAutoConfigurationTest { @Test public void test3() { this.reactiveWebApplicationContextRunner - .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class)).run(context -> { - Assertions.assertThat(context).hasSingleBean(MetadataLocalProperties.class); + .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class)) + .run(context -> { Assertions.assertThat(context).hasSingleBean(MetadataLocalProperties.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataAutoConfiguration.MetadataFeignInterceptorConfig.class); - Assertions.assertThat(context) - .hasSingleBean(MetadataAutoConfiguration.MetadataScgFilterConfig.class); + Assertions.assertThat(context).hasSingleBean( + MetadataAutoConfiguration.MetadataScgFilterConfig.class); Assertions.assertThat(context).hasSingleBean(MetadataFirstScgFilter.class); }); } diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml index 3c3a36f4..ead9b5d0 100644 --- a/spring-cloud-tencent-dependencies/pom.xml +++ b/spring-cloud-tencent-dependencies/pom.xml @@ -70,7 +70,7 @@ - 1.4.2-2020.0.5 + 1.4.3-2020.0.5-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 similarity index 96% rename from spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadbalancer.java rename to spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java index e7609835..0ace7d37 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 @@ -51,9 +51,9 @@ import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; * * @author liaochuntao */ -public class PolarisLoadbalancer extends RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalancer { +public class PolarisLoadBalancer extends RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalancer { - private static final Logger log = LoggerFactory.getLogger(PolarisLoadbalancer.class); + private static final Logger log = LoggerFactory.getLogger(PolarisLoadBalancer.class); private final String serviceId; @@ -63,7 +63,7 @@ public class PolarisLoadbalancer extends RoundRobinLoadBalancer implements React private ObjectProvider supplierObjectProvider; - public PolarisLoadbalancer(String serviceId, ObjectProvider supplierObjectProvider, + public PolarisLoadBalancer(String serviceId, ObjectProvider supplierObjectProvider, PolarisLoadBalancerProperties loadBalancerProperties, RouterAPI routerAPI) { super(supplierObjectProvider, serviceId); this.serviceId = serviceId; diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java index 20dd8c60..6dda6039 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java +++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.List; 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.pojo.PolarisServiceInstance; @@ -97,8 +96,6 @@ public class PolarisServiceInstanceListSupplier extends DelegatingServiceInstanc String srcNamespace = MetadataContext.LOCAL_NAMESPACE; String srcService = MetadataContext.LOCAL_SERVICE; Map transitiveCustomMetadata = MetadataContextHolder.get().getAllTransitiveCustomMetadata(); - String method = MetadataContextHolder.get().getSystemMetadata(MetadataConstant.SystemMetadataKey.PEER_PATH); - processRoutersRequest.setMethod(method); if (StringUtils.isNotBlank(srcNamespace) && StringUtils.isNotBlank(srcService)) { ServiceInfo serviceInfo = new ServiceInfo(); serviceInfo.setNamespace(srcNamespace); diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java index 8e9cc3d8..e9b11dd3 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java +++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java @@ -17,7 +17,7 @@ package com.tencent.cloud.polaris.loadbalancer.config; -import com.tencent.cloud.polaris.loadbalancer.PolarisLoadbalancer; +import com.tencent.cloud.polaris.loadbalancer.PolarisLoadBalancer; import com.tencent.cloud.polaris.loadbalancer.PolarisServiceInstanceListSupplier; import com.tencent.polaris.router.api.core.RouterAPI; @@ -59,7 +59,7 @@ public class PolarisLoadBalancerClientConfiguration { LoadBalancerClientFactory loadBalancerClientFactory, PolarisLoadBalancerProperties loadBalancerProperties, RouterAPI routerAPI) { String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); - return new PolarisLoadbalancer(name, + return new PolarisLoadBalancer(name, loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), loadBalancerProperties, routerAPI); }