From 764975efad0905b07344fd3d5fc832e27baff52a Mon Sep 17 00:00:00 2001 From: Haotian Zhang Date: Mon, 8 Sep 2025 15:32:35 +0800 Subject: [PATCH] feat:compatible metadata transfer with TSF SDK version 1.x. (#1736) Signed-off-by: Haotian Zhang <928016560@qq.com> --- CHANGELOG.md | 1 + ...codeTransferMedataFeignEnhancedPlugin.java | 21 +++++++++---------- ...nsferMedataRestTemplateEnhancedPlugin.java | 21 +++++++++---------- ...EncodeTransferMedataScgEnhancedPlugin.java | 14 ++++++------- ...TransferMedataWebClientEnhancedPlugin.java | 14 ++++++------- .../cloud/common/tsf/TsfContextUtils.java | 9 ++++++++ .../cloud/common/util/TsfTagUtils.java | 18 ++++++++-------- 7 files changed, 51 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24cd49320..eb830484a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,3 +26,4 @@ - [feat: support service registry and discovery with Polaris and Nacos](https://github.com/Tencent/spring-cloud-tencent/pull/1728) - [test:add junit tests to sct-common.](https://github.com/Tencent/spring-cloud-tencent/pull/1730) - [test:add junit tests to sct-gw-plugin.](https://github.com/Tencent/spring-cloud-tencent/pull/1732) +- [feat:compatible metadata transfer with TSF SDK version 1.x.](https://github.com/Tencent/spring-cloud-tencent/pull/1736) diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignEnhancedPlugin.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignEnhancedPlugin.java index 8b7ba78e0..3a8aca42c 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignEnhancedPlugin.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataFeignEnhancedPlugin.java @@ -71,23 +71,22 @@ public class EncodeTransferMedataFeignEnhancedPlugin implements EnhancedPlugin { MessageMetadataContainer calleeMessageMetadataContainer = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false); Map calleeTransitiveHeaders = calleeMessageMetadataContainer.getTransitiveHeaders(); - if (TsfContextUtils.isOnlyTsfConsulEnabled()) { + if (TsfContextUtils.isTsfConsulEnabled()) { Map tsfMetadataMap = TsfTagUtils.getTsfMetadataMap(calleeTransitiveHeaders, disposableMetadata, customMetadata, applicationMetadata); this.buildHeaderMap(request, tsfMetadataMap); } - else { - // currently only support transitive header from calleeMessageMetadataContainer - this.buildHeaderMap(request, calleeTransitiveHeaders); + // currently only support transitive header from calleeMessageMetadataContainer + this.buildHeaderMap(request, calleeTransitiveHeaders); - // build custom disposable metadata request header - this.buildMetadataHeader(request, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); + // build custom disposable metadata request header + this.buildMetadataHeader(request, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); - // process custom metadata - this.buildMetadataHeader(request, customMetadata, CUSTOM_METADATA); + // process custom metadata + this.buildMetadataHeader(request, customMetadata, CUSTOM_METADATA); + + // add application metadata + this.buildMetadataHeader(request, applicationMetadata, APPLICATION_METADATA); - // add application metadata - this.buildMetadataHeader(request, applicationMetadata, APPLICATION_METADATA); - } // set headers that need to be transmitted from the upstream this.buildTransmittedHeader(request, transHeaders); } diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateEnhancedPlugin.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateEnhancedPlugin.java index 78d4ec463..cd5af6b7b 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateEnhancedPlugin.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataRestTemplateEnhancedPlugin.java @@ -68,23 +68,22 @@ public class EncodeTransferMedataRestTemplateEnhancedPlugin implements EnhancedP MessageMetadataContainer calleeMessageMetadataContainer = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false); Map calleeTransitiveHeaders = calleeMessageMetadataContainer.getTransitiveHeaders(); - if (TsfContextUtils.isOnlyTsfConsulEnabled()) { + if (TsfContextUtils.isTsfConsulEnabled()) { Map tsfMetadataMap = TsfTagUtils.getTsfMetadataMap(calleeTransitiveHeaders, disposableMetadata, customMetadata, applicationMetadata); this.buildHeaderMap(httpRequest, tsfMetadataMap); } - else { - // currently only support transitive header from calleeMessageMetadataContainer - this.buildHeaderMap(httpRequest, calleeTransitiveHeaders); + // currently only support transitive header from calleeMessageMetadataContainer + this.buildHeaderMap(httpRequest, calleeTransitiveHeaders); - // build custom disposable metadata request header - this.buildMetadataHeader(httpRequest, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); + // build custom disposable metadata request header + this.buildMetadataHeader(httpRequest, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); - // build custom metadata request header - this.buildMetadataHeader(httpRequest, customMetadata, CUSTOM_METADATA); + // build custom metadata request header + this.buildMetadataHeader(httpRequest, customMetadata, CUSTOM_METADATA); + + // build application metadata request header + this.buildMetadataHeader(httpRequest, applicationMetadata, APPLICATION_METADATA); - // build application metadata request header - this.buildMetadataHeader(httpRequest, applicationMetadata, APPLICATION_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/EncodeTransferMedataScgEnhancedPlugin.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgEnhancedPlugin.java index a1b560d75..bab976cc6 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgEnhancedPlugin.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataScgEnhancedPlugin.java @@ -75,17 +75,15 @@ public class EncodeTransferMedataScgEnhancedPlugin implements EnhancedPlugin { MessageMetadataContainer calleeMessageMetadataContainer = metadataContext.getMetadataContainer(MetadataType.MESSAGE, false); Map calleeTransitiveHeaders = calleeMessageMetadataContainer.getTransitiveHeaders(); - if (TsfContextUtils.isOnlyTsfConsulEnabled()) { + if (TsfContextUtils.isTsfConsulEnabled()) { this.buildHeaderMap(builder, TsfTagUtils.getTsfMetadataMap(calleeTransitiveHeaders, disposableMetadata, customMetadata, applicationMetadata)); } - else { - // currently only support transitive header from calleeMessageMetadataContainer - this.buildHeaderMap(builder, calleeTransitiveHeaders); + // currently only support transitive header from calleeMessageMetadataContainer + this.buildHeaderMap(builder, calleeTransitiveHeaders); - this.buildMetadataHeader(builder, customMetadata, CUSTOM_METADATA); - this.buildMetadataHeader(builder, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); - this.buildMetadataHeader(builder, applicationMetadata, APPLICATION_METADATA); - } + this.buildMetadataHeader(builder, customMetadata, CUSTOM_METADATA); + this.buildMetadataHeader(builder, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); + this.buildMetadataHeader(builder, applicationMetadata, APPLICATION_METADATA); TransHeadersTransfer.transfer(exchange.getRequest()); context.setOriginRequest(exchange.mutate().request(builder.build()).build()); diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientEnhancedPlugin.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientEnhancedPlugin.java index 7e7aaa2d8..ef71312eb 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientEnhancedPlugin.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientEnhancedPlugin.java @@ -67,17 +67,15 @@ public class EncodeTransferMedataWebClientEnhancedPlugin implements EnhancedPlug Map calleeTransitiveHeaders = calleeMessageMetadataContainer.getTransitiveHeaders(); ClientRequest.Builder requestBuilder = ClientRequest.from(clientRequest); - if (TsfContextUtils.isOnlyTsfConsulEnabled()) { + if (TsfContextUtils.isTsfConsulEnabled()) { this.buildHeaderMap(requestBuilder, TsfTagUtils.getTsfMetadataMap(calleeTransitiveHeaders, disposableMetadata, customMetadata, applicationMetadata)); } - else { - // currently only support transitive header from calleeMessageMetadataContainer - this.buildHeaderMap(requestBuilder, calleeTransitiveHeaders); + // currently only support transitive header from calleeMessageMetadataContainer + this.buildHeaderMap(requestBuilder, calleeTransitiveHeaders); - this.buildMetadataHeader(requestBuilder, customMetadata, CUSTOM_METADATA); - this.buildMetadataHeader(requestBuilder, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); - this.buildMetadataHeader(requestBuilder, applicationMetadata, APPLICATION_METADATA); - } + this.buildMetadataHeader(requestBuilder, customMetadata, CUSTOM_METADATA); + this.buildMetadataHeader(requestBuilder, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); + this.buildMetadataHeader(requestBuilder, applicationMetadata, APPLICATION_METADATA); this.buildTransmittedHeader(requestBuilder, transHeaders); context.setOriginRequest(requestBuilder.build()); } diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/tsf/TsfContextUtils.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/tsf/TsfContextUtils.java index 5d2ece26e..3821fcd24 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/tsf/TsfContextUtils.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/tsf/TsfContextUtils.java @@ -85,4 +85,13 @@ public final class TsfContextUtils { public static boolean isOnlyTsfConsulEnabled() { return onlyTsfConsulEnabled; } + + /** + * This method should be called after {@link com.tencent.cloud.common.tsf.TsfContextUtils#isTsfConsulEnabled(Environment)}. + * @return whether Tsf Consul is enabled + */ + + public static boolean isTsfConsulEnabled() { + return tsfConsulEnabled; + } } diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/TsfTagUtils.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/TsfTagUtils.java index c3f9a5786..2c27dcc7f 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/TsfTagUtils.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/util/TsfTagUtils.java @@ -77,7 +77,7 @@ public final class TsfTagUtils { if (tsfUserTagKeys.contains(entry.getKey())) { continue; } - Tag tag = new Tag(entry.getKey(), entry.getValue(), Tag.ControlFlag.TRANSITIVE); + Tag tag = new Tag(entry.getKey(), entry.getValue(), Tag.ControlFlag.TRANSITIVE); tsfUserTags.add(tag); tsfUserTagKeys.add(entry.getKey()); if (LaneRouter.TRAFFIC_STAIN_LABEL.equals(entry.getKey()) && entry.getValue().contains("/")) { @@ -89,7 +89,7 @@ public final class TsfTagUtils { if (tsfUserTagKeys.contains(entry.getKey())) { continue; } - Tag tag = new Tag(entry.getKey(), entry.getValue()); + Tag tag = new Tag(entry.getKey(), entry.getValue()); tsfUserTags.add(tag); tsfUserTagKeys.add(entry.getKey()); } @@ -156,7 +156,7 @@ public final class TsfTagUtils { if (LOGGER.isDebugEnabled()) { LOGGER.debug("calleeTransitiveHeaders:{}, disposableMetadata: {}, customMetadata: {}, applicationMetadata: {}, tsfMetadataMap:{}", - calleeTransitiveHeaders, disposableMetadata, customMetadata, applicationMetadata, tsfMetadataMap); + calleeTransitiveHeaders, disposableMetadata, customMetadata, applicationMetadata, tsfMetadataMap); } return tsfMetadataMap; @@ -164,9 +164,9 @@ public final class TsfTagUtils { public static void updateTsfMetadata(Map mergedTransitiveMetadata, Map mergedDisposableMetadata, Map mergedApplicationMetadata, Map addHeaders, - AtomicReference callerIp, String encodedUserTagList, String encodedSystemTagList, String encodedMetadata) { + AtomicReference callerIp, String encodedUserTagList, String encodedSystemTagList, String encodedMetadata) { - if (!TsfContextUtils.isOnlyTsfConsulEnabled()) { + if (!TsfContextUtils.isTsfConsulEnabled()) { return; } List tsfUserTagList = TsfTagUtils.deserializeTagList(encodedUserTagList); @@ -222,10 +222,10 @@ public final class TsfTagUtils { } if (LOGGER.isDebugEnabled()) { - LOGGER.debug("mergedTransitiveMetadata:{}, mergedDisposableMetadata: {}, mergedApplicationMetadata: {}," - + " addHeaders:{}, encodedUserTagList:{}, encodedSystemTagList:{}, encodedMetadata:{}, callerIp:{}", - mergedTransitiveMetadata, mergedDisposableMetadata, mergedApplicationMetadata, - addHeaders, encodedUserTagList, encodedSystemTagList, encodedMetadata, callerIp.get()); + LOGGER.debug("mergedTransitiveMetadata:{}, mergedDisposableMetadata: {}, mergedApplicationMetadata: {}," + + " addHeaders:{}, encodedUserTagList:{}, encodedSystemTagList:{}, encodedMetadata:{}, callerIp:{}", + mergedTransitiveMetadata, mergedDisposableMetadata, mergedApplicationMetadata, + addHeaders, encodedUserTagList, encodedSystemTagList, encodedMetadata, callerIp.get()); } }