diff --git a/CHANGELOG.md b/CHANGELOG.md index a7a4ef8f..4d4afedf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,3 +17,4 @@ - [feat:report the labels when using RestTemplate.](https://github.com/Tencent/spring-cloud-tencent/pull/629) - [Bugfix: fix throw npe when router context is null](https://github.com/Tencent/spring-cloud-tencent/pull/635) - [fix:cancel reporting useless metadata.](https://github.com/Tencent/spring-cloud-tencent/pull/639) +- [Optimize:optimize transfer](https://github.com/Tencent/spring-cloud-tencent/pull/636) 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 eca88b07..03259a30 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 @@ -20,11 +20,8 @@ package com.tencent.cloud.metadata.core; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; -import java.util.Arrays; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.Set; import com.tencent.cloud.common.constant.MetadataConstant; import com.tencent.cloud.common.metadata.MetadataContextHolder; @@ -36,7 +33,6 @@ import reactor.core.publisher.Mono; import org.springframework.core.Ordered; import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; -import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; @@ -45,8 +41,6 @@ import org.springframework.web.server.WebFilterChain; import static com.tencent.cloud.common.constant.ContextConstant.UTF_8; import static com.tencent.cloud.common.constant.MetadataConstant.HeaderName.CUSTOM_DISPOSABLE_METADATA; import static com.tencent.cloud.common.constant.MetadataConstant.HeaderName.CUSTOM_METADATA; -import static com.tencent.cloud.common.metadata.MetadataContext.FRAGMENT_RAW_TRANSHEADERS; -import static com.tencent.cloud.common.metadata.MetadataContext.FRAGMENT_RAW_TRANSHEADERS_KV; /** * Filter used for storing the metadata from upstream temporarily when web application is @@ -85,39 +79,13 @@ public class DecodeTransferMetadataReactiveFilter implements WebFilter, Ordered MetadataConstant.HeaderName.METADATA_CONTEXT, MetadataContextHolder.get()); - setCompleteTransHeaderIntoMC(serverHttpRequest); + TransHeadersTransfer.transfer(serverHttpRequest); return webFilterChain.filter(serverWebExchange) .doOnError(throwable -> LOG.error("handle metadata[{}] error.", MetadataContextHolder.get(), throwable)) .doFinally((type) -> MetadataContextHolder.remove()); } - /** - * According to ServerHttpRequest and trans-headers(key list in string type) in metadata, build - * the complete headers(key-value list in map type) into metadata. - */ - private void setCompleteTransHeaderIntoMC(ServerHttpRequest serverHttpRequest) { - // transHeaderMetadata: for example, {"trans-headers" : {"header1,header2,header3":""}} - Map transHeaderMetadata = MetadataContextHolder.get() - .getFragmentContext(FRAGMENT_RAW_TRANSHEADERS); - if (!CollectionUtils.isEmpty(transHeaderMetadata)) { - String transHeaders = transHeaderMetadata.keySet().stream().findFirst().orElse(""); - String[] transHeaderArray = transHeaders.split(","); - HttpHeaders headers = serverHttpRequest.getHeaders(); - Set headerKeys = headers.keySet(); - for (String httpHeader : headerKeys) { - Arrays.stream(transHeaderArray).forEach(transHeader -> { - if (transHeader.equals(httpHeader)) { - List list = headers.get(httpHeader); - String httpHeaderValue = JacksonUtils.serialize2Json(list); - MetadataContextHolder.get() - .putContext(FRAGMENT_RAW_TRANSHEADERS_KV, httpHeader, httpHeaderValue); - } - }); - } - } - } - private Map getIntervalMetadata(ServerHttpRequest serverHttpRequest, String headerName) { HttpHeaders httpHeaders = serverHttpRequest.getHeaders(); String customMetadataStr = httpHeaders.getFirst(headerName); 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 b446af2e..c4e2eefa 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 @@ -21,8 +21,6 @@ package com.tencent.cloud.metadata.core; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; -import java.util.Arrays; -import java.util.Enumeration; import java.util.HashMap; import java.util.Map; @@ -39,15 +37,12 @@ import org.slf4j.LoggerFactory; import org.springframework.core.annotation.Order; import org.springframework.lang.NonNull; -import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; import static com.tencent.cloud.common.constant.ContextConstant.UTF_8; import static com.tencent.cloud.common.constant.MetadataConstant.HeaderName.CUSTOM_DISPOSABLE_METADATA; import static com.tencent.cloud.common.constant.MetadataConstant.HeaderName.CUSTOM_METADATA; -import static com.tencent.cloud.common.metadata.MetadataContext.FRAGMENT_RAW_TRANSHEADERS; -import static com.tencent.cloud.common.metadata.MetadataContext.FRAGMENT_RAW_TRANSHEADERS_KV; /** * Filter used for storing the metadata from upstream temporarily when web application is @@ -76,33 +71,13 @@ public class DecodeTransferMetadataServletFilter extends OncePerRequestFilter { MetadataContextHolder.init(mergedTransitiveMetadata, mergedDisposableMetadata); - setCompleteTransHeaderIntoMC(httpServletRequest); - filterChain.doFilter(httpServletRequest, httpServletResponse); - } - - /** - * According to HttpServletRequest and trans-headers(key list in string type) in metadata, build - * the complete headers(key-value list in map type) into metadata. - */ - private void setCompleteTransHeaderIntoMC(HttpServletRequest httpServletRequest) { - // transHeaderMetadata: for example, {"trans-headers" : {"header1,header2,header3":""}} - Map transHeaderMetadata = MetadataContextHolder.get() - .getFragmentContext(FRAGMENT_RAW_TRANSHEADERS); - if (!CollectionUtils.isEmpty(transHeaderMetadata)) { - String transHeaders = transHeaderMetadata.keySet().stream().findFirst().orElse(""); - String[] transHeaderArray = transHeaders.split(","); - Enumeration httpHeaders = httpServletRequest.getHeaderNames(); - while (httpHeaders.hasMoreElements()) { - String httpHeader = httpHeaders.nextElement(); - Arrays.stream(transHeaderArray).forEach(transHeader -> { - if (transHeader.equals(httpHeader)) { - String httpHeaderValue = httpServletRequest.getHeader(httpHeader); - // for example, {"trans-headers-kv" : {"header1":"v1","header2":"v2"...}} - MetadataContextHolder.get() - .putContext(FRAGMENT_RAW_TRANSHEADERS_KV, httpHeader, httpHeaderValue); - } - }); - } + TransHeadersTransfer.transfer(httpServletRequest); + try { + filterChain.doFilter(httpServletRequest, httpServletResponse); + } + finally { + // Clean up ThreadLocal. + MetadataContextHolder.remove(); } } diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignInterceptor.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignInterceptor.java index b35ec02d..68d3ed00 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignInterceptor.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignInterceptor.java @@ -19,7 +19,6 @@ package com.tencent.cloud.metadata.core; import java.io.UnsupportedEncodingException; -import java.util.HashMap; import java.util.Map; import com.tencent.cloud.common.constant.MetadataConstant; @@ -59,21 +58,14 @@ public class EncodeTransferMedataFeignInterceptor implements RequestInterceptor, public void apply(RequestTemplate requestTemplate) { // get metadata of current thread MetadataContext metadataContext = MetadataContextHolder.get(); - Map customMetadata = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); - Map disposableMetadata = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_DISPOSABLE); - Map transHeaders = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_RAW_TRANSHEADERS_KV); + Map customMetadata = metadataContext.getCustomMetadata(); + Map disposableMetadata = metadataContext.getDisposableMetadata(); + Map transHeaders = metadataContext.getTransHeaders(); - // Clean up one-time metadata coming from upstream . - Map newestCustomMetadata = new HashMap<>(); - customMetadata.forEach((key, value) -> { - if (!disposableMetadata.containsKey(key)) { - newestCustomMetadata.put(key, value); - } - }); this.buildMetadataHeader(requestTemplate, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); // process custom metadata - this.buildMetadataHeader(requestTemplate, newestCustomMetadata, CUSTOM_METADATA); + this.buildMetadataHeader(requestTemplate, customMetadata, CUSTOM_METADATA); // set headers that need to be transmitted from the upstream this.buildTransmittedHeader(requestTemplate, transHeaders); diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateInterceptor.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateInterceptor.java index 89d5c5f6..9420b628 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateInterceptor.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateInterceptor.java @@ -21,7 +21,6 @@ package com.tencent.cloud.metadata.core; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.util.HashMap; import java.util.Map; import com.tencent.cloud.common.constant.MetadataConstant; @@ -59,21 +58,15 @@ public class EncodeTransferMedataRestTemplateInterceptor implements ClientHttpRe @NonNull ClientHttpRequestExecution clientHttpRequestExecution) throws IOException { // get metadata of current thread MetadataContext metadataContext = MetadataContextHolder.get(); - Map customMetadata = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); - Map disposableMetadata = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_DISPOSABLE); - Map transHeaders = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_RAW_TRANSHEADERS_KV); + Map customMetadata = metadataContext.getCustomMetadata(); + Map disposableMetadata = metadataContext.getDisposableMetadata(); + Map transHeaders = metadataContext.getTransHeaders(); - Map newestCustomMetadata = new HashMap<>(); - customMetadata.forEach((key, value) -> { - if (!disposableMetadata.containsKey(key)) { - newestCustomMetadata.put(key, value); - } - }); // build custom disposable metadata request header this.buildMetadataHeader(httpRequest, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); // build custom metadata request header - this.buildMetadataHeader(httpRequest, newestCustomMetadata, CUSTOM_METADATA); + this.buildMetadataHeader(httpRequest, customMetadata, CUSTOM_METADATA); // set headers that need to be transmitted from the upstream this.buildTransmittedHeader(httpRequest, transHeaders); diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgFilter.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgFilter.java index c33f5bbc..3224db01 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgFilter.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgFilter.java @@ -20,11 +20,7 @@ package com.tencent.cloud.metadata.core; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.Set; import com.tencent.cloud.common.constant.MetadataConstant; import com.tencent.cloud.common.metadata.MetadataContext; @@ -35,7 +31,6 @@ 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.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.util.CollectionUtils; import org.springframework.web.server.ServerWebExchange; @@ -43,8 +38,6 @@ import org.springframework.web.server.ServerWebExchange; import static com.tencent.cloud.common.constant.ContextConstant.UTF_8; import static com.tencent.cloud.common.constant.MetadataConstant.HeaderName.CUSTOM_DISPOSABLE_METADATA; import static com.tencent.cloud.common.constant.MetadataConstant.HeaderName.CUSTOM_METADATA; -import static com.tencent.cloud.common.metadata.MetadataContext.FRAGMENT_RAW_TRANSHEADERS; -import static com.tencent.cloud.common.metadata.MetadataContext.FRAGMENT_RAW_TRANSHEADERS_KV; import static org.springframework.cloud.gateway.filter.ReactiveLoadBalancerClientFilter.LOAD_BALANCER_CLIENT_FILTER_ORDER; /** @@ -72,51 +65,16 @@ public class EncodeTransferMedataScgFilter implements GlobalFilter, Ordered { metadataContext = MetadataContextHolder.get(); } - Map customMetadata = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); - Map disposableMetadata = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_DISPOSABLE); + Map customMetadata = metadataContext.getCustomMetadata(); + Map disposableMetadata = metadataContext.getDisposableMetadata(); - // Clean upstream disposable metadata. - Map newestCustomMetadata = new HashMap<>(); - customMetadata.forEach((key, value) -> { - if (!disposableMetadata.containsKey(key)) { - newestCustomMetadata.put(key, value); - } - }); - - this.buildMetadataHeader(builder, newestCustomMetadata, CUSTOM_METADATA); + this.buildMetadataHeader(builder, customMetadata, CUSTOM_METADATA); this.buildMetadataHeader(builder, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); - setCompleteTransHeaderIntoMC(exchange.getRequest()); + TransHeadersTransfer.transfer(exchange.getRequest()); return chain.filter(exchange.mutate().request(builder.build()).build()); } - /** - * According to ServerHttpRequest and trans-headers(key list in string type) in metadata, build - * the complete headers(key-value list in map type) into metadata. - */ - private void setCompleteTransHeaderIntoMC(ServerHttpRequest serverHttpRequest) { - // transHeaderMetadata: for example, {"trans-headers" : {"header1,header2,header3":""}} - Map transHeaderMetadata = MetadataContextHolder.get() - .getFragmentContext(FRAGMENT_RAW_TRANSHEADERS); - if (!CollectionUtils.isEmpty(transHeaderMetadata)) { - String transHeaders = transHeaderMetadata.keySet().stream().findFirst().orElse(""); - String[] transHeaderArray = transHeaders.split(","); - HttpHeaders headers = serverHttpRequest.getHeaders(); - Set headerKeys = headers.keySet(); - for (String httpHeader : headerKeys) { - Arrays.stream(transHeaderArray).forEach(transHeader -> { - if (transHeader.equals(httpHeader)) { - List list = headers.get(httpHeader); - String httpHeaderValue = JacksonUtils.serialize2Json(list); - // for example, {"trans-headers-kv" : {"header1":"v1","header2":"v2"...}} - MetadataContextHolder.get() - .putContext(FRAGMENT_RAW_TRANSHEADERS_KV, httpHeader, httpHeaderValue); - } - }); - } - } - } - /** * Set metadata into the request header for {@link ServerHttpRequest.Builder} . * @param builder instance of {@link ServerHttpRequest.Builder} diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/TransHeadersTransfer.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/TransHeadersTransfer.java new file mode 100644 index 00000000..dd9a337d --- /dev/null +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/TransHeadersTransfer.java @@ -0,0 +1,99 @@ +/* + * 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.metadata.core; + +import java.util.Arrays; +import java.util.Enumeration; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; + +import com.tencent.cloud.common.metadata.MetadataContextHolder; +import com.tencent.cloud.common.util.JacksonUtils; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.util.CollectionUtils; + +/** + * According to request and trans-headers(key list in string type) in metadata, build + * the complete headers(key-value list in map type) into metadata. + * + * @author lingxiao.wlx + */ +public final class TransHeadersTransfer { + + private TransHeadersTransfer() { + } + + /** + * According to {@link HttpServletRequest} and trans-headers(key list in string type) in metadata, build + * the complete headers(key-value list in map type) into metadata. + * + * @param httpServletRequest httpServletRequest + */ + public static void transfer(HttpServletRequest httpServletRequest) { + // transHeaderMetadata: for example, {"trans-headers" : {"header1,header2,header3":""}} + Map transHeaderMetadata = MetadataContextHolder.get().getTransHeaders(); + if (!CollectionUtils.isEmpty(transHeaderMetadata)) { + String transHeaders = transHeaderMetadata.keySet().stream().findFirst().orElse(""); + String[] transHeaderArray = transHeaders.split(","); + Enumeration httpHeaders = httpServletRequest.getHeaderNames(); + while (httpHeaders.hasMoreElements()) { + String httpHeader = httpHeaders.nextElement(); + Arrays.stream(transHeaderArray).forEach(transHeader -> { + if (transHeader.equals(httpHeader)) { + String httpHeaderValue = httpServletRequest.getHeader(httpHeader); + // for example, {"trans-headers-kv" : {"header1":"v1","header2":"v2"...}} + MetadataContextHolder.get().setTransHeadersKV(httpHeader, httpHeaderValue); + } + }); + } + } + } + + /** + * According to {@link ServerHttpRequest} and trans-headers(key list in string type) in metadata, build + * the complete headers(key-value list in map type) into metadata. + * + * @param serverHttpRequest serverHttpRequest + */ + public static void transfer(ServerHttpRequest serverHttpRequest) { + // transHeaderMetadata: for example, {"trans-headers" : {"header1,header2,header3":""}} + Map transHeaderMetadata = MetadataContextHolder.get().getTransHeaders(); + if (!CollectionUtils.isEmpty(transHeaderMetadata)) { + String transHeaders = transHeaderMetadata.keySet().stream().findFirst().orElse(""); + String[] transHeaderArray = transHeaders.split(","); + HttpHeaders headers = serverHttpRequest.getHeaders(); + Set headerKeys = headers.keySet(); + for (String httpHeader : headerKeys) { + Arrays.stream(transHeaderArray).forEach(transHeader -> { + if (transHeader.equals(httpHeader)) { + List list = headers.get(httpHeader); + String httpHeaderValue = JacksonUtils.serialize2Json(list); + // for example, {"trans-headers-kv" : {"header1":"v1","header2":"v2"...}} + MetadataContextHolder.get().setTransHeadersKV(httpHeader, httpHeaderValue); + } + }); + } + } + } +} diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java index 1e734674..b090e381 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java @@ -124,8 +124,7 @@ public class PolarisRouterServiceInstanceListSupplier extends DelegatingServiceI PolarisRouterContext routerContext = new PolarisRouterContext(); - routerContext.putLabels(RouterConstant.TRANSITIVE_LABELS, MetadataContextHolder.get() - .getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE)); + routerContext.putLabels(RouterConstant.TRANSITIVE_LABELS, MetadataContextHolder.get().getTransitiveMetadata()); Map labelHeaderValuesMap = new HashMap<>(); try { diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptor.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptor.java index 3d396160..35816958 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptor.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptor.java @@ -109,8 +109,7 @@ public class RouterLabelFeignInterceptor implements RequestInterceptor, Ordered } // labels from downstream - Map transitiveLabels = MetadataContextHolder.get() - .getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + Map transitiveLabels = MetadataContextHolder.get().getTransitiveMetadata(); labels.putAll(transitiveLabels); // pass label by header diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/resttemplate/RouterLabelRestTemplateInterceptor.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/resttemplate/RouterLabelRestTemplateInterceptor.java index 93bfe10d..a072898a 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/resttemplate/RouterLabelRestTemplateInterceptor.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/resttemplate/RouterLabelRestTemplateInterceptor.java @@ -139,8 +139,7 @@ public class RouterLabelRestTemplateInterceptor implements ClientHttpRequestInte } // labels from downstream - Map transitiveLabels = MetadataContextHolder.get() - .getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + Map transitiveLabels = MetadataContextHolder.get().getTransitiveMetadata(); labels.putAll(transitiveLabels); // pass label by header diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilter.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilter.java index 74b254a1..1fd3e218 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilter.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilter.java @@ -255,8 +255,7 @@ public class PolarisReactiveLoadBalancerClientFilter extends ReactiveLoadBalance } // labels from downstream - Map transitiveLabels = MetadataContextHolder.get() - .getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + Map transitiveLabels = MetadataContextHolder.get().getTransitiveMetadata(); labels.putAll(transitiveLabels); return labels; diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisRouterContextTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisRouterContextTest.java index 8b21c48c..6c795db9 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisRouterContextTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisRouterContextTest.java @@ -28,7 +28,7 @@ import org.junit.Assert; import org.junit.Test; /** - * test for {@link PolarisRouterContext} + * test for {@link PolarisRouterContext}. * *@author lepdou 2022-05-26 */ diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/RouterRuleLabelResolverTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/RouterRuleLabelResolverTest.java index d024fb39..9e07504f 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/RouterRuleLabelResolverTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/RouterRuleLabelResolverTest.java @@ -37,7 +37,7 @@ import org.mockito.junit.MockitoJUnitRunner; import static org.mockito.Mockito.when; /** - * test for {@link RouterRuleLabelResolver} + * test for {@link RouterRuleLabelResolver}. *@author lepdou 2022-05-26 */ @RunWith(MockitoJUnitRunner.class) diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/feign/FeignExpressionLabelUtilsTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/feign/FeignExpressionLabelUtilsTest.java index 6078be75..66aa7e7b 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/feign/FeignExpressionLabelUtilsTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/feign/FeignExpressionLabelUtilsTest.java @@ -30,7 +30,7 @@ import org.junit.Test; import org.springframework.util.StringUtils; /** - * Test for {@link FeignExpressionLabelUtils} + * Test for {@link FeignExpressionLabelUtils}. *@author lepdou 2022-05-26 */ public class FeignExpressionLabelUtilsTest { diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptorTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptorTest.java index 74ef3db2..2c57fed7 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptorTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/feign/RouterLabelFeignInterceptorTest.java @@ -50,7 +50,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; /** - * test for {@link RouterLabelFeignInterceptor} + * test for {@link RouterLabelFeignInterceptor}. * @author lepdou 2022-05-26 */ @RunWith(MockitoJUnitRunner.class) @@ -92,7 +92,7 @@ public class RouterLabelFeignInterceptorTest { Map transitiveLabels = new HashMap<>(); transitiveLabels.put("k1", "v1"); transitiveLabels.put("k2", "v22"); - when(metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE)).thenReturn(transitiveLabels); + when(metadataContext.getTransitiveMetadata()).thenReturn(transitiveLabels); // mock MetadataContextHolder#get try (MockedStatic mockedMetadataContextHolder = Mockito.mockStatic(MetadataContextHolder.class)) { diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/resttemplate/RouterLabelRestTemplateInterceptorTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/resttemplate/RouterLabelRestTemplateInterceptorTest.java index 25c10345..232bddcb 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/resttemplate/RouterLabelRestTemplateInterceptorTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/resttemplate/RouterLabelRestTemplateInterceptorTest.java @@ -135,7 +135,7 @@ public class RouterLabelRestTemplateInterceptorTest { Map transitiveLabels = new HashMap<>(); transitiveLabels.put("k1", "v1"); transitiveLabels.put("k2", "v22"); - when(metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE)).thenReturn(transitiveLabels); + when(metadataContext.getTransitiveMetadata()).thenReturn(transitiveLabels); routerLabels.putAll(transitiveLabels); mockedMetadataContextHolder.when(MetadataContextHolder::get).thenReturn(metadataContext); diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilterTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilterTest.java index 67e97dff..c872302a 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilterTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilterTest.java @@ -59,7 +59,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; /** - * Test for ${@link PolarisReactiveLoadBalancerClientFilter} + * Test for ${@link PolarisReactiveLoadBalancerClientFilter}. *@author lepdou 2022-07-04 */ @RunWith(MockitoJUnitRunner.class) @@ -97,7 +97,7 @@ public class PolarisReactiveLoadBalancerClientFilterTest { Map transitiveLabels = new HashMap<>(); transitiveLabels.put("t1", "v1"); transitiveLabels.put("t2", "v2"); - when(metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE)).thenReturn(transitiveLabels); + when(metadataContext.getTransitiveMetadata()).thenReturn(transitiveLabels); mockedMetadataContextHolder = Mockito.mockStatic(MetadataContextHolder.class); mockedMetadataContextHolder.when(MetadataContextHolder::get).thenReturn(metadataContext); 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 d0ccaf08..46fe4600 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 @@ -19,6 +19,7 @@ package com.tencent.cloud.common.metadata; import java.util.Collections; +import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -118,6 +119,63 @@ public class MetadataContext { } + public Map getDisposableMetadata() { + return this.getFragmentContext(MetadataContext.FRAGMENT_DISPOSABLE); + } + + public Map getTransitiveMetadata() { + return this.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + } + + public Map getCustomMetadata() { + Map transitiveMetadata = this.getTransitiveMetadata(); + Map disposableMetadata = this.getDisposableMetadata(); + Map customMetadata = new HashMap<>(); + // Clean up one-time metadata coming from upstream . + transitiveMetadata.forEach((key, value) -> { + if (!disposableMetadata.containsKey(key)) { + customMetadata.put(key, value); + } + }); + return Collections.unmodifiableMap(customMetadata); + } + + public Map getTransHeaders() { + return this.getFragmentContext(MetadataContext.FRAGMENT_RAW_TRANSHEADERS); + } + + public Map getTransHeadersKV() { + return this.getFragmentContext(MetadataContext.FRAGMENT_RAW_TRANSHEADERS_KV); + } + + public Map getLoadbalancerMetadata() { + return this.getFragmentContext(FRAGMENT_LOAD_BALANCER); + } + + public void setTransitiveMetadata(Map transitiveMetadata) { + this.putFragmentContext(FRAGMENT_TRANSITIVE, Collections.unmodifiableMap(transitiveMetadata)); + } + + public void setDisposableMetadata(Map disposableMetadata) { + this.putFragmentContext(FRAGMENT_DISPOSABLE, Collections.unmodifiableMap(disposableMetadata)); + } + + public void setUpstreamDisposableMetadata(Map upstreamDisposableMetadata) { + this.putFragmentContext(FRAGMENT_UPSTREAM_DISPOSABLE, Collections.unmodifiableMap(upstreamDisposableMetadata)); + } + + public void setTransHeadersKV(String key, String value) { + this.putContext(FRAGMENT_RAW_TRANSHEADERS_KV, key, value); + } + + public void setTransHeaders(String key, String value) { + this.putContext(FRAGMENT_RAW_TRANSHEADERS, key, value); + } + + public void setLoadbalancer(String key, String value) { + this.putContext(FRAGMENT_LOAD_BALANCER, key, value); + } + public Map getFragmentContext(String fragment) { Map fragmentContext = fragmentContexts.get(fragment); if (fragmentContext == null) { 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 60983ef6..fa325879 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 @@ -29,8 +29,6 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import static com.tencent.cloud.common.metadata.MetadataContext.FRAGMENT_DISPOSABLE; -import static com.tencent.cloud.common.metadata.MetadataContext.FRAGMENT_RAW_TRANSHEADERS; -import static com.tencent.cloud.common.metadata.MetadataContext.FRAGMENT_TRANSITIVE; import static com.tencent.cloud.common.metadata.MetadataContext.FRAGMENT_UPSTREAM_DISPOSABLE; /** @@ -67,11 +65,11 @@ public final class MetadataContextHolder { // init static transitive metadata MetadataContext metadataContext = new MetadataContext(); - metadataContext.putFragmentContext(FRAGMENT_TRANSITIVE, staticMetadataManager.getMergedStaticTransitiveMetadata()); - metadataContext.putFragmentContext(FRAGMENT_DISPOSABLE, staticMetadataManager.getMergedStaticDisposableMetadata()); + metadataContext.setTransitiveMetadata(staticMetadataManager.getMergedStaticTransitiveMetadata()); + metadataContext.setDisposableMetadata(staticMetadataManager.getMergedStaticDisposableMetadata()); if (StringUtils.hasText(staticMetadataManager.getTransHeaderFromEnv())) { - metadataContext.putContext(FRAGMENT_RAW_TRANSHEADERS, staticMetadataManager.getTransHeaderFromEnv(), ""); + metadataContext.setTransHeaders(staticMetadataManager.getTransHeaderFromEnv(), ""); } METADATA_CONTEXT.set(metadataContext); @@ -132,17 +130,17 @@ public final class MetadataContextHolder { // Save transitive metadata to ThreadLocal. if (!CollectionUtils.isEmpty(dynamicTransitiveMetadata)) { - Map staticTransitiveMetadata = metadataContext.getFragmentContext(FRAGMENT_TRANSITIVE); + Map staticTransitiveMetadata = metadataContext.getTransitiveMetadata(); Map mergedTransitiveMetadata = new HashMap<>(); mergedTransitiveMetadata.putAll(staticTransitiveMetadata); mergedTransitiveMetadata.putAll(dynamicTransitiveMetadata); - metadataContext.putFragmentContext(FRAGMENT_TRANSITIVE, Collections.unmodifiableMap(mergedTransitiveMetadata)); + metadataContext.setTransitiveMetadata(Collections.unmodifiableMap(mergedTransitiveMetadata)); Map mergedDisposableMetadata = new HashMap<>(dynamicDisposableMetadata); - metadataContext.putFragmentContext(FRAGMENT_UPSTREAM_DISPOSABLE, Collections.unmodifiableMap(mergedDisposableMetadata)); + metadataContext.setUpstreamDisposableMetadata(Collections.unmodifiableMap(mergedDisposableMetadata)); - Map staticDisposableMetadata = metadataContext.getFragmentContext(FRAGMENT_DISPOSABLE); - metadataContext.putFragmentContext(FRAGMENT_DISPOSABLE, Collections.unmodifiableMap(staticDisposableMetadata)); + Map staticDisposableMetadata = metadataContext.getDisposableMetadata(); + metadataContext.setDisposableMetadata(Collections.unmodifiableMap(staticDisposableMetadata)); } MetadataContextHolder.set(metadataContext); } 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 c6b7cbcd..78ecbd5c 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 @@ -45,10 +45,10 @@ public class MetadataContextHolderTest { customMetadata.put("a", "1"); customMetadata.put("b", "2"); MetadataContext metadataContext = MetadataContextHolder.get(); - metadataContext.putFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE, customMetadata); + metadataContext.setTransitiveMetadata(customMetadata); MetadataContextHolder.set(metadataContext); - customMetadata = MetadataContextHolder.get().getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + customMetadata = MetadataContextHolder.get().getTransitiveMetadata(); Assertions.assertThat(customMetadata.get("a")).isEqualTo("1"); Assertions.assertThat(customMetadata.get("b")).isEqualTo("2"); @@ -60,7 +60,7 @@ public class MetadataContextHolderTest { customMetadata.put("c", "3"); MetadataContextHolder.init(customMetadata, new HashMap<>()); metadataContext = MetadataContextHolder.get(); - customMetadata = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + customMetadata = metadataContext.getTransitiveMetadata(); Assertions.assertThat(customMetadata.get("a")).isEqualTo("1"); Assertions.assertThat(customMetadata.get("b")).isEqualTo("22"); Assertions.assertThat(customMetadata.get("c")).isEqualTo("3"); diff --git a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/util/ExpressionParserV1Test.java b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/util/ExpressionParserV1Test.java index 2f6e5b64..ae55900f 100644 --- a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/util/ExpressionParserV1Test.java +++ b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/util/ExpressionParserV1Test.java @@ -22,7 +22,7 @@ import org.junit.Assert; import org.junit.Test; /** - * Test for {@link ExpressionParserV1} + * Test for {@link ExpressionParserV1}. * @author lepdou 2022-10-08 */ public class ExpressionParserV1Test { diff --git a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/util/ExpressionParserV2Test.java b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/util/ExpressionParserV2Test.java index a97b64ba..38d4a661 100644 --- a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/util/ExpressionParserV2Test.java +++ b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/util/ExpressionParserV2Test.java @@ -22,7 +22,7 @@ import org.junit.Assert; import org.junit.Test; /** - * Test for {@link ExpressionParserV2} + * Test for {@link ExpressionParserV2}. * @author lepdou 2022-10-08 */ public class ExpressionParserV2Test { diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-backend/src/main/java/com/tencent/cloud/metadata/service/backend/MetadataBackendController.java b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-backend/src/main/java/com/tencent/cloud/metadata/service/backend/MetadataBackendController.java index 7da621e8..9ee58a04 100644 --- a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-backend/src/main/java/com/tencent/cloud/metadata/service/backend/MetadataBackendController.java +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-backend/src/main/java/com/tencent/cloud/metadata/service/backend/MetadataBackendController.java @@ -55,7 +55,7 @@ public class MetadataBackendController { // Get Custom Metadata From Context MetadataContext context = MetadataContextHolder.get(); - Map customMetadataMap = context.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + Map customMetadataMap = context.getTransitiveMetadata(); customMetadataMap.forEach((key, value) -> { LOG.info("Metadata Backend Custom Metadata (Key-Value): {} : {}", key, value); diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-frontend/src/main/java/com/tencent/cloud/metadata/service/frontend/MetadataFrontendController.java b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-frontend/src/main/java/com/tencent/cloud/metadata/service/frontend/MetadataFrontendController.java index 3d107f55..20ca8ae3 100644 --- a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-frontend/src/main/java/com/tencent/cloud/metadata/service/frontend/MetadataFrontendController.java +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-frontend/src/main/java/com/tencent/cloud/metadata/service/frontend/MetadataFrontendController.java @@ -69,7 +69,7 @@ public class MetadataFrontendController { // Get Custom Metadata From Context MetadataContext context = MetadataContextHolder.get(); - Map customMetadataMap = context.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + Map customMetadataMap = context.getTransitiveMetadata(); customMetadataMap.forEach((key, value) -> { LOG.info("Metadata Middle Custom Metadata (Key-Value): {} : {}", key, value); @@ -116,7 +116,7 @@ public class MetadataFrontendController { // Get Custom Metadata From Context MetadataContext context = MetadataContextHolder.get(); - Map customMetadataMap = context.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + Map customMetadataMap = context.getTransitiveMetadata(); customMetadataMap.forEach((key, value) -> { LOG.info("Metadata Middle Custom Metadata (Key-Value): {} : {}", key, value); diff --git a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-middle/src/main/java/com/tencent/cloud/metadata/service/middle/MetadataMiddleController.java b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-middle/src/main/java/com/tencent/cloud/metadata/service/middle/MetadataMiddleController.java index 7ea673a5..18f075e2 100644 --- a/spring-cloud-tencent-examples/metadata-transfer-example/metadata-middle/src/main/java/com/tencent/cloud/metadata/service/middle/MetadataMiddleController.java +++ b/spring-cloud-tencent-examples/metadata-transfer-example/metadata-middle/src/main/java/com/tencent/cloud/metadata/service/middle/MetadataMiddleController.java @@ -92,7 +92,7 @@ public class MetadataMiddleController { // Get Custom Metadata From Context MetadataContext context = MetadataContextHolder.get(); - Map customMetadataMap = context.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + Map customMetadataMap = context.getTransitiveMetadata(); customMetadataMap.forEach((key, value) -> { LOG.info("Metadata Middle Custom Metadata (Key-Value): {} : {}", key, value); 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 c6ddfd45..e81dec91 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 @@ -77,13 +77,13 @@ public class TrafficStainingGatewayFilter implements GlobalFilter, Ordered { metadataContext = MetadataContextHolder.get(); } - Map oldTransitiveMetadata = metadataContext.getFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE); + Map oldTransitiveMetadata = metadataContext.getTransitiveMetadata(); // append new transitive metadata Map newTransitiveMetadata = new HashMap<>(oldTransitiveMetadata); newTransitiveMetadata.putAll(stainedLabels); - metadataContext.putFragmentContext(MetadataContext.FRAGMENT_TRANSITIVE, newTransitiveMetadata); + metadataContext.setTransitiveMetadata(newTransitiveMetadata); }).build(); return chain.filter(exchange.mutate().request(request).build()); 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 8920530e..021ba726 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 @@ -115,8 +115,7 @@ public class EnhancedRestTemplateReporter extends AbstractPolarisReporterAdapter private void reportResult(URI url, ClientHttpResponse response) { ServiceCallResult resultRequest = createServiceCallResult(url); try { - Map loadBalancerContext = MetadataContextHolder.get() - .getFragmentContext(MetadataContext.FRAGMENT_LOAD_BALANCER); + Map loadBalancerContext = MetadataContextHolder.get().getLoadbalancerMetadata(); String targetHost = loadBalancerContext.get("host"); String targetPort = loadBalancerContext.get("port"); diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/resttemplate/LoadBalancerClientAspectUtils.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/resttemplate/LoadBalancerClientAspectUtils.java index 0eb2dfd7..1b9f1163 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/resttemplate/LoadBalancerClientAspectUtils.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/resttemplate/LoadBalancerClientAspectUtils.java @@ -17,7 +17,6 @@ package com.tencent.cloud.rpc.enhancement.resttemplate; -import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; import org.aspectj.lang.ProceedingJoinPoint; @@ -37,9 +36,8 @@ public final class LoadBalancerClientAspectUtils { Object server = joinPoint.getArgs()[0]; if (server instanceof ServiceInstance) { ServiceInstance instance = (ServiceInstance) server; - MetadataContextHolder.get().putContext(MetadataContext.FRAGMENT_LOAD_BALANCER, "host", instance.getHost()); - MetadataContextHolder.get() - .putContext(MetadataContext.FRAGMENT_LOAD_BALANCER, "port", String.valueOf(instance.getPort())); + MetadataContextHolder.get().setLoadbalancer("host", instance.getHost()); + MetadataContextHolder.get().setLoadbalancer("port", String.valueOf(instance.getPort())); } } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/resttemplate/EnhancedRestTemplateReporterTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/resttemplate/EnhancedRestTemplateReporterTest.java index 099f266d..05270de4 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/resttemplate/EnhancedRestTemplateReporterTest.java +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/resttemplate/EnhancedRestTemplateReporterTest.java @@ -54,7 +54,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** - * Test for {@link EnhancedRestTemplateReporter} + * Test for {@link EnhancedRestTemplateReporter}. * @author lepdou 2022-09-06 */ @RunWith(MockitoJUnitRunner.class) @@ -82,7 +82,7 @@ public class EnhancedRestTemplateReporterTest { Map loadBalancerContext = new HashMap<>(); loadBalancerContext.put("host", "1.1.1.1"); loadBalancerContext.put("port", "8080"); - when(metadataContext.getFragmentContext(MetadataContext.FRAGMENT_LOAD_BALANCER)).thenReturn(loadBalancerContext); + when(metadataContext.getLoadbalancerMetadata()).thenReturn(loadBalancerContext); mockedMetadataContextHolder = Mockito.mockStatic(MetadataContextHolder.class); mockedMetadataContextHolder.when(MetadataContextHolder::get).thenReturn(metadataContext);