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 8f4b832d8..03259a302 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 @@ -41,7 +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.constant.MetadataConstant.HeaderName.DEFAULT_DISPOSABLE_METADATA; /** * Filter used for storing the metadata from upstream temporarily when web application is @@ -70,10 +69,10 @@ public class DecodeTransferMetadataReactiveFilter implements WebFilter, Ordered mergedTransitiveMetadata.putAll(internalTransitiveMetadata); mergedTransitiveMetadata.putAll(customTransitiveMetadata); - Map internalCustomDisposableMetadata = getIntervalMetadata(serverHttpRequest, CUSTOM_DISPOSABLE_METADATA); - Map internalDefaultDisposableMetadata = getIntervalMetadata(serverHttpRequest, DEFAULT_DISPOSABLE_METADATA); + Map internalDisposableMetadata = getIntervalMetadata(serverHttpRequest, CUSTOM_DISPOSABLE_METADATA); + Map mergedDisposableMetadata = new HashMap<>(internalDisposableMetadata); - MetadataContextHolder.init(mergedTransitiveMetadata, internalCustomDisposableMetadata, internalDefaultDisposableMetadata); + MetadataContextHolder.init(mergedTransitiveMetadata, mergedDisposableMetadata); // Save to ServerWebExchange. serverWebExchange.getAttributes().put( diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataServletFilter.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/DecodeTransferMetadataServletFilter.java index 3220e4bf1..3a17d311c 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 @@ -42,7 +42,6 @@ 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.constant.MetadataConstant.HeaderName.DEFAULT_DISPOSABLE_METADATA; /** * Filter used for storing the metadata from upstream temporarily when web application is @@ -66,10 +65,10 @@ public class DecodeTransferMetadataServletFilter extends OncePerRequestFilter { mergedTransitiveMetadata.putAll(internalTransitiveMetadata); mergedTransitiveMetadata.putAll(customTransitiveMetadata); - Map internalCustomDisposableMetadata = getInternalMetadata(httpServletRequest, CUSTOM_DISPOSABLE_METADATA); - Map internalDefaultDisposableMetadata = getInternalMetadata(httpServletRequest, DEFAULT_DISPOSABLE_METADATA); + Map internalDisposableMetadata = getInternalMetadata(httpServletRequest, CUSTOM_DISPOSABLE_METADATA); + Map mergedDisposableMetadata = new HashMap<>(internalDisposableMetadata); - MetadataContextHolder.init(mergedTransitiveMetadata, internalCustomDisposableMetadata, internalDefaultDisposableMetadata); + MetadataContextHolder.init(mergedTransitiveMetadata, mergedDisposableMetadata); TransHeadersTransfer.transfer(httpServletRequest); try { 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 3de5cc06a..0cfc0f142 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 @@ -25,7 +25,6 @@ import com.tencent.cloud.common.constant.MetadataConstant; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.util.JacksonUtils; -import com.tencent.cloud.metadata.util.DefaultTransferMedataUtils; import feign.RequestInterceptor; import feign.RequestTemplate; import org.slf4j.Logger; @@ -38,7 +37,6 @@ import org.springframework.web.client.RestTemplate; 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.constant.MetadataConstant.HeaderName.DEFAULT_DISPOSABLE_METADATA; import static java.net.URLEncoder.encode; /** @@ -63,12 +61,7 @@ public class EncodeTransferMedataFeignInterceptor implements RequestInterceptor, Map customMetadata = metadataContext.getCustomMetadata(); Map disposableMetadata = metadataContext.getDisposableMetadata(); Map transHeaders = metadataContext.getTransHeadersKV(); - Map defaultMetadata = DefaultTransferMedataUtils.getDefaultTransferMedata(); - // build default disposable metadata request header - this.buildMetadataHeader(requestTemplate, defaultMetadata, DEFAULT_DISPOSABLE_METADATA); - - // build custom disposable metadata request header this.buildMetadataHeader(requestTemplate, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); // process custom metadata 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 ebac3d1c5..2e360cdd8 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 @@ -27,7 +27,6 @@ import com.tencent.cloud.common.constant.MetadataConstant; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.util.JacksonUtils; -import com.tencent.cloud.metadata.util.DefaultTransferMedataUtils; import org.springframework.core.Ordered; import org.springframework.http.HttpRequest; @@ -40,7 +39,6 @@ import org.springframework.util.CollectionUtils; 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.constant.MetadataConstant.HeaderName.DEFAULT_DISPOSABLE_METADATA; /** * Interceptor used for adding the metadata in http headers from context when web client @@ -63,10 +61,6 @@ public class EncodeTransferMedataRestTemplateInterceptor implements ClientHttpRe Map customMetadata = metadataContext.getCustomMetadata(); Map disposableMetadata = metadataContext.getDisposableMetadata(); Map transHeaders = metadataContext.getTransHeadersKV(); - Map defaultMetadata = DefaultTransferMedataUtils.getDefaultTransferMedata(); - - // build default disposable metadata request header - this.buildMetadataHeader(httpRequest, defaultMetadata, DEFAULT_DISPOSABLE_METADATA); // build custom disposable metadata request header this.buildMetadataHeader(httpRequest, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); 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 43ebf925d..3224db011 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 @@ -26,7 +26,6 @@ import com.tencent.cloud.common.constant.MetadataConstant; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.util.JacksonUtils; -import com.tencent.cloud.metadata.util.DefaultTransferMedataUtils; import reactor.core.publisher.Mono; import org.springframework.cloud.gateway.filter.GatewayFilterChain; @@ -39,7 +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.constant.MetadataConstant.HeaderName.DEFAULT_DISPOSABLE_METADATA; import static org.springframework.cloud.gateway.filter.ReactiveLoadBalancerClientFilter.LOAD_BALANCER_CLIENT_FILTER_ORDER; /** @@ -69,11 +67,9 @@ public class EncodeTransferMedataScgFilter implements GlobalFilter, Ordered { Map customMetadata = metadataContext.getCustomMetadata(); Map disposableMetadata = metadataContext.getDisposableMetadata(); - Map defaultMetadata = DefaultTransferMedataUtils.getDefaultTransferMedata(); this.buildMetadataHeader(builder, customMetadata, CUSTOM_METADATA); this.buildMetadataHeader(builder, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); - this.buildMetadataHeader(builder, defaultMetadata, DEFAULT_DISPOSABLE_METADATA); TransHeadersTransfer.transfer(exchange.getRequest()); return chain.filter(exchange.mutate().request(builder.build()).build()); diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientFilter.java b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientFilter.java index 65e7eba9c..8e64637bb 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientFilter.java +++ b/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/core/EncodeTransferMedataWebClientFilter.java @@ -25,7 +25,6 @@ import java.util.Map; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.util.JacksonUtils; -import com.tencent.cloud.metadata.util.DefaultTransferMedataUtils; import reactor.core.publisher.Mono; import org.springframework.util.CollectionUtils; @@ -37,7 +36,6 @@ import org.springframework.web.reactive.function.client.ExchangeFunction; 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.constant.MetadataConstant.HeaderName.DEFAULT_DISPOSABLE_METADATA; /** * web client filter used for writing metadata in HTTP request header. @@ -52,13 +50,11 @@ public class EncodeTransferMedataWebClientFilter implements ExchangeFilterFuncti Map customMetadata = metadataContext.getCustomMetadata(); Map disposableMetadata = metadataContext.getDisposableMetadata(); Map transHeaders = metadataContext.getTransHeadersKV(); - Map defaultMetadata = DefaultTransferMedataUtils.getDefaultTransferMedata(); ClientRequest.Builder requestBuilder = ClientRequest.from(clientRequest); this.buildMetadataHeader(requestBuilder, customMetadata, CUSTOM_METADATA); this.buildMetadataHeader(requestBuilder, disposableMetadata, CUSTOM_DISPOSABLE_METADATA); - this.buildMetadataHeader(requestBuilder, defaultMetadata, DEFAULT_DISPOSABLE_METADATA); this.buildTransmittedHeader(requestBuilder, transHeaders); ClientRequest request = requestBuilder.build(); diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/PolarisCircuitBreakerMockServerTest.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/PolarisCircuitBreakerMockServerTest.java index 36976da74..e8315c2e7 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/PolarisCircuitBreakerMockServerTest.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/PolarisCircuitBreakerMockServerTest.java @@ -121,7 +121,7 @@ public class PolarisCircuitBreakerMockServerTest { } }, t -> "fallback"); resList.add(res); - Utils.sleepUninterrupted(2000); + Utils.sleepUninterrupted(1000); } assertThat(resList).isEqualTo(Arrays.asList("invoke success", "fallback", "fallback", "fallback", "fallback")); diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisRouterAutoConfigurationTest.java b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisRouterAutoConfigurationTest.java index 123343e72..9e9fc863d 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisRouterAutoConfigurationTest.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisRouterAutoConfigurationTest.java @@ -40,7 +40,7 @@ public class PolarisRouterAutoConfigurationTest { PolarisLoadBalancerTest.class, PolarisContextAutoConfiguration.class, PolarisLoadBalancerAutoConfiguration.class)) - .withPropertyValues("spring.cloud.loadbalancer.configurations=polaris"); + .withPropertyValues("spring.cloud.loadbalancer.configurations=polaris", "spring.application.name=test"); private final ApplicationContextRunner noPolarisContextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of( diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/util/OkHttpUtilTest.java b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/util/OkHttpUtilTest.java index 2dccfc171..ce3a0daab 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/util/OkHttpUtilTest.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/util/OkHttpUtilTest.java @@ -37,7 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Haotian Zhang */ @ExtendWith(SpringExtension.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = OkHttpUtilTest.TestApplication.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = OkHttpUtilTest.TestApplication.class, properties = {"spring.application.name=test", "spring.cloud.polaris.discovery.register=false"}) public class OkHttpUtilTest { @LocalServerPort diff --git a/spring-cloud-starter-tencent-polaris-ratelimit/src/test/java/com/tencent/cloud/polaris/ratelimit/config/PolarisRateLimitPropertiesTest.java b/spring-cloud-starter-tencent-polaris-ratelimit/src/test/java/com/tencent/cloud/polaris/ratelimit/config/PolarisRateLimitPropertiesTest.java index e36b9d530..3b27fe84a 100644 --- a/spring-cloud-starter-tencent-polaris-ratelimit/src/test/java/com/tencent/cloud/polaris/ratelimit/config/PolarisRateLimitPropertiesTest.java +++ b/spring-cloud-starter-tencent-polaris-ratelimit/src/test/java/com/tencent/cloud/polaris/ratelimit/config/PolarisRateLimitPropertiesTest.java @@ -34,7 +34,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Haotian Zhang */ @ExtendWith(SpringExtension.class) -@SpringBootTest(classes = PolarisRateLimitPropertiesTest.TestApplication.class) +@SpringBootTest(classes = PolarisRateLimitPropertiesTest.TestApplication.class, properties = "spring.application.name=test") @ActiveProfiles("test") public class PolarisRateLimitPropertiesTest { diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/FeignAutoConfigurationTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/FeignAutoConfigurationTest.java index 30f37a15f..774ca3acc 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/FeignAutoConfigurationTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/FeignAutoConfigurationTest.java @@ -19,6 +19,7 @@ package com.tencent.cloud.polaris.router.config; import com.tencent.cloud.common.metadata.config.MetadataAutoConfiguration; +import com.tencent.cloud.common.util.ApplicationContextAwareUtils; import com.tencent.cloud.polaris.context.config.PolarisContextAutoConfiguration; import com.tencent.cloud.polaris.router.feign.RouterLabelFeignInterceptor; import org.junit.jupiter.api.Test; @@ -39,7 +40,9 @@ public class FeignAutoConfigurationTest { MetadataAutoConfiguration.class, RouterAutoConfiguration.class, PolarisContextAutoConfiguration.class, - FeignAutoConfiguration.class)); + FeignAutoConfiguration.class, + ApplicationContextAwareUtils.class + )).withPropertyValues("spring.application.name=test"); @Test public void routerLabelInterceptor() { diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/RouterAutoConfigurationTests.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/RouterAutoConfigurationTests.java index 5416a5644..3bf557430 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/RouterAutoConfigurationTests.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/RouterAutoConfigurationTests.java @@ -19,6 +19,7 @@ package com.tencent.cloud.polaris.router.config; import com.tencent.cloud.common.metadata.config.MetadataAutoConfiguration; +import com.tencent.cloud.common.util.ApplicationContextAwareUtils; import com.tencent.cloud.polaris.context.config.PolarisContextAutoConfiguration; import org.junit.jupiter.api.Test; @@ -42,7 +43,9 @@ public class RouterAutoConfigurationTests { MetadataAutoConfiguration.class, RouterAutoConfiguration.class, PolarisContextAutoConfiguration.class, - RouterAutoConfiguration.RouterLabelRestTemplateConfig.class)); + RouterAutoConfiguration.RouterLabelRestTemplateConfig.class, + ApplicationContextAwareUtils.class + )).withPropertyValues("spring.application.name=test"); @Test public void testRouterLabelRestTemplateConfig() { 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 74de66c2d..c3774baf1 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 @@ -83,11 +83,6 @@ public final class MetadataConstant { */ public static final String CUSTOM_DISPOSABLE_METADATA = "SCT-CUSTOM-DISPOSABLE-METADATA"; - /** - * Default Disposable Metadata. - */ - public static final String DEFAULT_DISPOSABLE_METADATA = "SCT-DEFAULT-DISPOSABLE-METADATA"; - /** * System Metadata. */ 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 f53493b1a..f6307ae32 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 @@ -121,13 +121,13 @@ public final class MetadataContextHolder { /** * Save metadata map to thread local. * @param dynamicTransitiveMetadata custom metadata collection - * @param dynamicCustomDisposableMetadata custom disposable metadata collection - * @param dynamicDefaultDisposableMetadata default disposable metadata collection + * @param dynamicDisposableMetadata custom disposable metadata connection */ - public static void init(Map dynamicTransitiveMetadata, Map dynamicCustomDisposableMetadata, Map dynamicDefaultDisposableMetadata) { + public static void init(Map dynamicTransitiveMetadata, Map dynamicDisposableMetadata) { // Init ThreadLocal. MetadataContextHolder.remove(); MetadataContext metadataContext = MetadataContextHolder.get(); + // Save transitive metadata to ThreadLocal. if (!CollectionUtils.isEmpty(dynamicTransitiveMetadata)) { Map staticTransitiveMetadata = metadataContext.getTransitiveMetadata(); @@ -136,14 +136,8 @@ public final class MetadataContextHolder { mergedTransitiveMetadata.putAll(dynamicTransitiveMetadata); metadataContext.setTransitiveMetadata(Collections.unmodifiableMap(mergedTransitiveMetadata)); } - if (!CollectionUtils.isEmpty(dynamicCustomDisposableMetadata) || !CollectionUtils.isEmpty(dynamicDefaultDisposableMetadata)) { - Map mergedUpstreamDisposableMetadata = new HashMap<>(); - if (!CollectionUtils.isEmpty(dynamicCustomDisposableMetadata)) { - mergedUpstreamDisposableMetadata.putAll(dynamicCustomDisposableMetadata); - } - if (!CollectionUtils.isEmpty(dynamicDefaultDisposableMetadata)) { - mergedUpstreamDisposableMetadata.putAll(dynamicDefaultDisposableMetadata); - } + if (!CollectionUtils.isEmpty(dynamicDisposableMetadata)) { + Map mergedUpstreamDisposableMetadata = new HashMap<>(dynamicDisposableMetadata); metadataContext.setUpstreamDisposableMetadata(Collections.unmodifiableMap(mergedUpstreamDisposableMetadata)); } Map staticDisposableMetadata = metadataContext.getDisposableMetadata(); diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/StaticMetadataManager.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/StaticMetadataManager.java index 63ea080fb..f472b0c6f 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/StaticMetadataManager.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/StaticMetadataManager.java @@ -21,7 +21,9 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; +import java.util.stream.Collectors; import com.tencent.cloud.common.metadata.config.MetadataLocalProperties; import com.tencent.cloud.common.spi.InstanceMetadataProvider; @@ -81,14 +83,14 @@ public class StaticMetadataManager { private String campus; public StaticMetadataManager(MetadataLocalProperties metadataLocalProperties, - InstanceMetadataProvider instanceMetadataProvider) { + List instanceMetadataProviders) { parseConfigMetadata(metadataLocalProperties); parseEnvMetadata(); - parseCustomMetadata(instanceMetadataProvider); + parseCustomMetadata(instanceMetadataProviders); - parseLocationMetadata(metadataLocalProperties, instanceMetadataProvider); + parseLocationMetadata(metadataLocalProperties, instanceMetadataProviders); merge(); @@ -182,14 +184,20 @@ public class StaticMetadataManager { } @SuppressWarnings("DuplicatedCode") - private void parseCustomMetadata(InstanceMetadataProvider instanceMetadataProvider) { - if (instanceMetadataProvider == null) { + private void parseCustomMetadata(List instanceMetadataProviders) { + if (CollectionUtils.isEmpty(instanceMetadataProviders)) { customSPIMetadata = Collections.emptyMap(); customSPITransitiveMetadata = Collections.emptyMap(); customSPIDisposableMetadata = Collections.emptyMap(); return; } + instanceMetadataProviders.forEach(this::parseCustomMetadata); + + } + + @SuppressWarnings("DuplicatedCode") + private void parseCustomMetadata(InstanceMetadataProvider instanceMetadataProvider) { // resolve all metadata Map allMetadata = instanceMetadataProvider.getMetadata(); if (allMetadata == null) { @@ -247,10 +255,16 @@ public class StaticMetadataManager { } private void parseLocationMetadata(MetadataLocalProperties metadataLocalProperties, - InstanceMetadataProvider instanceMetadataProvider) { + List instanceMetadataProviders) { // resolve region info - if (instanceMetadataProvider != null) { - region = instanceMetadataProvider.getRegion(); + if (!CollectionUtils.isEmpty(instanceMetadataProviders)) { + Set providerRegions = instanceMetadataProviders.stream().map(InstanceMetadataProvider::getRegion).filter(Objects::nonNull).collect(Collectors.toSet()); + if (!CollectionUtils.isEmpty(providerRegions)) { + if (providerRegions.size() > 1) { + throw new IllegalArgumentException("Multiple Regions Provided in InstanceMetadataProviders"); + } + region = providerRegions.iterator().next(); + } } if (StringUtils.isBlank(region)) { region = System.getenv(ENV_METADATA_REGION); @@ -260,8 +274,14 @@ public class StaticMetadataManager { } // resolve zone info - if (instanceMetadataProvider != null) { - zone = instanceMetadataProvider.getZone(); + if (!CollectionUtils.isEmpty(instanceMetadataProviders)) { + Set providerZones = instanceMetadataProviders.stream().map(InstanceMetadataProvider::getZone).filter(Objects::nonNull).collect(Collectors.toSet()); + if (!CollectionUtils.isEmpty(providerZones)) { + if (providerZones.size() > 1) { + throw new IllegalArgumentException("Multiple Zones Provided in InstanceMetadataProviders"); + } + zone = providerZones.iterator().next(); + } } if (StringUtils.isBlank(zone)) { zone = System.getenv(ENV_METADATA_ZONE); @@ -271,8 +291,14 @@ public class StaticMetadataManager { } // resolve campus info - if (instanceMetadataProvider != null) { - campus = instanceMetadataProvider.getCampus(); + if (!CollectionUtils.isEmpty(instanceMetadataProviders)) { + Set providerCampus = instanceMetadataProviders.stream().map(InstanceMetadataProvider::getCampus).filter(Objects::nonNull).collect(Collectors.toSet()); + if (!CollectionUtils.isEmpty(providerCampus)) { + if (providerCampus.size() > 1) { + throw new IllegalArgumentException("Multiple Campus Provided in InstanceMetadataProviders"); + } + campus = providerCampus.iterator().next(); + } } if (StringUtils.isBlank(campus)) { campus = System.getenv(ENV_METADATA_CAMPUS); 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 060bed30d..a5a02b67b 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/config/MetadataAutoConfiguration.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/config/MetadataAutoConfiguration.java @@ -18,8 +18,12 @@ package com.tencent.cloud.common.metadata.config; +import java.util.List; + import com.tencent.cloud.common.metadata.StaticMetadataManager; import com.tencent.cloud.common.spi.InstanceMetadataProvider; +import com.tencent.cloud.common.spi.impl.DefaultInstanceMetadataProvider; +import com.tencent.cloud.common.util.ApplicationContextAwareUtils; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -42,10 +46,15 @@ public class MetadataAutoConfiguration { return new MetadataLocalProperties(); } + @Bean + public InstanceMetadataProvider defaultInstanceMetadataProvider(ApplicationContextAwareUtils applicationContextAwareUtils) { + return new DefaultInstanceMetadataProvider(applicationContextAwareUtils); + } + @Bean public StaticMetadataManager metadataManager(MetadataLocalProperties metadataLocalProperties, - @Nullable InstanceMetadataProvider instanceMetadataProvider) { - return new StaticMetadataManager(metadataLocalProperties, instanceMetadataProvider); + @Nullable List instanceMetadataProviders) { + return new StaticMetadataManager(metadataLocalProperties, instanceMetadataProviders); } } diff --git a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/util/DefaultTransferMedataUtils.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java similarity index 57% rename from spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/util/DefaultTransferMedataUtils.java rename to spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java index 87d81480a..e4a99636c 100644 --- a/spring-cloud-starter-tencent-metadata-transfer/src/main/java/com/tencent/cloud/metadata/util/DefaultTransferMedataUtils.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java @@ -13,13 +13,19 @@ * 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.util; +package com.tencent.cloud.common.spi.impl; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; +import com.tencent.cloud.common.spi.InstanceMetadataProvider; +import com.tencent.cloud.common.util.ApplicationContextAwareUtils; import static com.tencent.cloud.common.constant.MetadataConstant.DefaultMetadata.DEFAULT_METADATA_SOURCE_SERVICE_NAME; import static com.tencent.cloud.common.constant.MetadataConstant.DefaultMetadata.DEFAULT_METADATA_SOURCE_SERVICE_NAMESPACE; @@ -27,19 +33,31 @@ import static com.tencent.cloud.common.metadata.MetadataContext.LOCAL_NAMESPACE; import static com.tencent.cloud.common.metadata.MetadataContext.LOCAL_SERVICE; /** - * DefaultTransferMedataUtils. + * DefaultInstanceMetadataProvider. + * provide DEFAULT_METADATA_SOURCE_SERVICE_NAMESPACE, DEFAULT_METADATA_SOURCE_SERVICE_NAME * - * @author seanyu 2023-02-27 + * @author sean yu */ -public final class DefaultTransferMedataUtils { +public class DefaultInstanceMetadataProvider implements InstanceMetadataProvider { + + private final ApplicationContextAwareUtils applicationContextAwareUtils; - private DefaultTransferMedataUtils() { + // ensure ApplicationContextAwareUtils init before + public DefaultInstanceMetadataProvider(ApplicationContextAwareUtils applicationContextAwareUtils) { + this.applicationContextAwareUtils = applicationContextAwareUtils; } - public static Map getDefaultTransferMedata() { + @Override + public Map getMetadata() { return new HashMap() {{ put(DEFAULT_METADATA_SOURCE_SERVICE_NAMESPACE, LOCAL_NAMESPACE); put(DEFAULT_METADATA_SOURCE_SERVICE_NAME, LOCAL_SERVICE); }}; } + + @Override + public Set getDisposableMetadataKeys() { + return new HashSet<>(Arrays.asList(DEFAULT_METADATA_SOURCE_SERVICE_NAMESPACE, DEFAULT_METADATA_SOURCE_SERVICE_NAME)); + } + } 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 2cbeb95f8..d405b52a0 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,7 +58,7 @@ public class MetadataContextHolderTest { customMetadata.put("a", "1"); customMetadata.put("b", "22"); customMetadata.put("c", "3"); - MetadataContextHolder.init(customMetadata, new HashMap<>(), new HashMap<>()); + MetadataContextHolder.init(customMetadata, new HashMap<>()); metadataContext = MetadataContextHolder.get(); customMetadata = metadataContext.getTransitiveMetadata(); Assertions.assertThat(customMetadata.get("a")).isEqualTo("1"); diff --git a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java index 2bd773e98..8dbda4cfe 100644 --- a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java +++ b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java @@ -93,7 +93,7 @@ public class StaticMetadataManagerTest { when(metadataLocalProperties.getTransitive()).thenReturn(Collections.singletonList("k1")); StaticMetadataManager metadataManager = new StaticMetadataManager(metadataLocalProperties, - new MockedMetadataProvider()); + Collections.singletonList(new MockedMetadataProvider())); Map metadata = metadataManager.getAllCustomMetadata(); assertThat(metadata.size()).isEqualTo(3); @@ -126,7 +126,7 @@ public class StaticMetadataManagerTest { when(metadataLocalProperties.getTransitive()).thenReturn(Collections.singletonList("k1")); StaticMetadataManager metadataManager = new StaticMetadataManager(metadataLocalProperties, - new MockedMetadataProvider()); + Collections.singletonList(new MockedMetadataProvider())); Map metadata = metadataManager.getMergedStaticMetadata(); assertThat(metadata.size()).isEqualTo(6); 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 83143d6d5..c5cda081c 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 @@ -18,6 +18,8 @@ package com.tencent.cloud.common.metadata.config; + +import com.tencent.cloud.common.util.ApplicationContextAwareUtils; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; @@ -33,11 +35,17 @@ import org.springframework.boot.test.context.runner.WebApplicationContextRunner; */ public class MetadataAutoConfigurationTest { - private final ApplicationContextRunner applicationContextRunner = new ApplicationContextRunner(); + private final ApplicationContextRunner applicationContextRunner = new ApplicationContextRunner().withPropertyValues( + "spring.application.name=test" + ); - private final WebApplicationContextRunner webApplicationContextRunner = new WebApplicationContextRunner(); + private final WebApplicationContextRunner webApplicationContextRunner = new WebApplicationContextRunner().withPropertyValues( + "spring.application.name=test" + ); - private final ReactiveWebApplicationContextRunner reactiveWebApplicationContextRunner = new ReactiveWebApplicationContextRunner(); + private final ReactiveWebApplicationContextRunner reactiveWebApplicationContextRunner = new ReactiveWebApplicationContextRunner().withPropertyValues( + "spring.application.name=test" + ); /** * No any web application. @@ -45,7 +53,7 @@ public class MetadataAutoConfigurationTest { @Test public void test1() { this.applicationContextRunner - .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class, ApplicationContextAwareUtils.class)) .run(context -> { Assertions.assertThat(context).hasSingleBean(MetadataLocalProperties.class); }); @@ -57,7 +65,7 @@ public class MetadataAutoConfigurationTest { @Test public void test2() { this.webApplicationContextRunner - .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class, ApplicationContextAwareUtils.class)) .run(context -> { Assertions.assertThat(context).hasSingleBean(MetadataLocalProperties.class); }); @@ -69,7 +77,7 @@ public class MetadataAutoConfigurationTest { @Test public void test3() { this.reactiveWebApplicationContextRunner - .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(MetadataAutoConfiguration.class, ApplicationContextAwareUtils.class)) .run(context -> { Assertions.assertThat(context).hasSingleBean(MetadataLocalProperties.class); }); diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfigurationTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfigurationTest.java index 7be8b8b60..199fd36b7 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfigurationTest.java +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfigurationTest.java @@ -50,7 +50,7 @@ public class RpcEnhancementAutoConfigurationTest { RpcEnhancementAutoConfiguration.class, PolarisRestTemplateAutoConfigurationTester.class, FeignLoadBalancerAutoConfiguration.class)) - .withPropertyValues("spring.cloud.polaris.circuitbreaker.enabled=true"); + .withPropertyValues("spring.cloud.polaris.circuitbreaker.enabled=true", "spring.application.name=test"); @Test public void testDefaultInitialization() { diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementReporterPropertiesTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementReporterPropertiesTest.java index 48db48072..111c031c5 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementReporterPropertiesTest.java +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementReporterPropertiesTest.java @@ -38,7 +38,7 @@ import static org.springframework.http.HttpStatus.Series.SERVER_ERROR; * @author Haotian Zhang */ @ExtendWith(SpringExtension.class) -@SpringBootTest(classes = RpcEnhancementReporterPropertiesTest.TestApplication.class) +@SpringBootTest(classes = RpcEnhancementReporterPropertiesTest.TestApplication.class, properties = "spring.application.name=test") @ActiveProfiles("test") public class RpcEnhancementReporterPropertiesTest { diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifierTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifierTest.java index ba55b6f2e..4ef678597 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifierTest.java +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/stat/config/StatConfigModifierTest.java @@ -41,7 +41,8 @@ public class StatConfigModifierTest { .withPropertyValues("spring.cloud.polaris.stat.enabled=true") .withPropertyValues("spring.cloud.polaris.stat.host=127.0.0.1") .withPropertyValues("spring.cloud.polaris.stat.port=20000") - .withPropertyValues("spring.cloud.polaris.stat.path=/xxx"); + .withPropertyValues("spring.cloud.polaris.stat.path=/xxx") + .withPropertyValues("spring.application.name=test"); private final ApplicationContextRunner pushContextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(TestApplication.class)) @@ -49,12 +50,14 @@ public class StatConfigModifierTest { .withPropertyValues("spring.cloud.polaris.stat.enabled=true") .withPropertyValues("spring.cloud.polaris.stat.pushgateway.enabled=true") .withPropertyValues("spring.cloud.polaris.stat.pushgateway.address=127.0.0.1:9091") - .withPropertyValues("spring.cloud.polaris.stat.pushgateway.push-interval=1000"); + .withPropertyValues("spring.cloud.polaris.stat.pushgateway.push-interval=1000") + .withPropertyValues("spring.application.name=test"); private final ApplicationContextRunner disabledContextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(TestApplication.class)) .withPropertyValues("spring.cloud.polaris.enabled=true") - .withPropertyValues("spring.cloud.polaris.stat.enabled=false"); + .withPropertyValues("spring.cloud.polaris.stat.enabled=false") + .withPropertyValues("spring.application.name=test"); @Test void testPull() {