From ffbe8749a5589835b0baa8ec768dcc096c935b13 Mon Sep 17 00:00:00 2001 From: Haotian Zhang <928016560@qq.com> Date: Fri, 12 Dec 2025 15:10:37 +0800 Subject: [PATCH] feat:support body store switch. (#1771) Signed-off-by: Haotian Zhang <928016560@qq.com> --- changes/changes-2.1.0.0.md | 1 + .../FaultInjectionAutoConfiguration.java | 2 +- .../config/FaultInjectionProperties.java | 4 +- .../TrafficMirroringAutoConfiguration.java | 2 +- .../config/TrafficMirroringProperties.java | 4 +- .../TrafficMirroringPropertiesTest.java | 10 ++-- ...ngLoadBalancerClientBeanPostProcessor.java | 4 +- .../RpcEnhancementAutoConfiguration.java | 4 +- .../config/RpcEnhancementProperties.java | 55 +++++++++++++++++ ...nhancementPropertiesAutoConfiguration.java | 6 ++ .../RpcEnhancementReporterProperties.java | 2 +- .../feign/EnhancedFeignBeanPostProcessor.java | 8 ++- .../instrument/feign/EnhancedFeignClient.java | 8 ++- ...BlockingLoadBalancerClientInterceptor.java | 9 ++- .../PolarisBlockingLoadBalancerClient.java | 11 ++-- .../config/RpcEnhancementPropertiesTest.java | 60 +++++++++++++++++++ .../EnhancedFeignBeanPostProcessorTest.java | 6 +- .../feign/EnhancedFeignClientTest.java | 17 ++++-- 18 files changed, 181 insertions(+), 32 deletions(-) create mode 100644 spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementProperties.java create mode 100644 spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementPropertiesTest.java diff --git a/changes/changes-2.1.0.0.md b/changes/changes-2.1.0.0.md index bf6214ce2..823d62752 100644 --- a/changes/changes-2.1.0.0.md +++ b/changes/changes-2.1.0.0.md @@ -33,3 +33,4 @@ - [fix: fix nacos service discovery.](https://github.com/Tencent/spring-cloud-tencent/pull/1752) - [fix:fix NPE when rate-limiting with null value.](https://github.com/Tencent/spring-cloud-tencent/pull/1763) - [fix: get source service name from upstream application meta in getServerPreSpanAttributes & set custom tag in current server span in tsf.](https://github.com/Tencent/spring-cloud-tencent/pull/1767) +- [feat:support body store switch.](https://github.com/Tencent/spring-cloud-tencent/pull/1771) diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-fault-injection-plugin/src/main/java/com/tencent/cloud/plugin/fault/config/FaultInjectionAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-fault-injection-plugin/src/main/java/com/tencent/cloud/plugin/fault/config/FaultInjectionAutoConfiguration.java index 32aedb416..c81ffd29d 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-fault-injection-plugin/src/main/java/com/tencent/cloud/plugin/fault/config/FaultInjectionAutoConfiguration.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-fault-injection-plugin/src/main/java/com/tencent/cloud/plugin/fault/config/FaultInjectionAutoConfiguration.java @@ -31,7 +31,7 @@ import org.springframework.context.annotation.Configuration; * @author Haotian Zhang */ @Configuration(proxyBeanMethods = false) -@ConditionalOnProperty(value = "spring.cloud.polaris.fault-injection.enabled", matchIfMissing = true) +@ConditionalOnProperty("spring.cloud.polaris.fault-injection.enabled") @EnableConfigurationProperties(FaultInjectionProperties.class) public class FaultInjectionAutoConfiguration { diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-fault-injection-plugin/src/main/java/com/tencent/cloud/plugin/fault/config/FaultInjectionProperties.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-fault-injection-plugin/src/main/java/com/tencent/cloud/plugin/fault/config/FaultInjectionProperties.java index af2af1842..bbaf4f63d 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-fault-injection-plugin/src/main/java/com/tencent/cloud/plugin/fault/config/FaultInjectionProperties.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-fault-injection-plugin/src/main/java/com/tencent/cloud/plugin/fault/config/FaultInjectionProperties.java @@ -28,9 +28,9 @@ import org.springframework.boot.context.properties.ConfigurationProperties; public class FaultInjectionProperties { /** - * If traffic mirroring is enabled. Default is true. + * If traffic mirroring is enabled. Default is false. */ - private boolean enabled = true; + private boolean enabled = false; public boolean isEnabled() { return enabled; diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/main/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringAutoConfiguration.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/main/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringAutoConfiguration.java index d7b385b31..023152070 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/main/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringAutoConfiguration.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/main/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringAutoConfiguration.java @@ -33,7 +33,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration(proxyBeanMethods = false) @ConditionalOnPolarisRouterEnabled -@ConditionalOnProperty(value = "spring.cloud.polaris.traffic-mirroring.enabled", matchIfMissing = true) +@ConditionalOnProperty("spring.cloud.polaris.traffic-mirroring.enabled") @EnableConfigurationProperties(TrafficMirroringProperties.class) public class TrafficMirroringAutoConfiguration { diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/main/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringProperties.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/main/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringProperties.java index 97cd875dd..67700fb4f 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/main/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringProperties.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/main/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringProperties.java @@ -28,9 +28,9 @@ import org.springframework.boot.context.properties.ConfigurationProperties; public class TrafficMirroringProperties { /** - * If traffic mirroring is enabled. Default is true. + * If traffic mirroring is enabled. Default is false. */ - private boolean enabled = true; + private boolean enabled = false; /** * Traffic mirroring request pool size. Default is 100. diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/test/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringPropertiesTest.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/test/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringPropertiesTest.java index 014a86222..892a51e4e 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/test/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringPropertiesTest.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-traffic-mirroring-plugin/src/test/java/com/tencent/cloud/plugin/trafficmirroring/config/TrafficMirroringPropertiesTest.java @@ -31,7 +31,7 @@ public class TrafficMirroringPropertiesTest { void testDefaultValues() { TrafficMirroringProperties properties = new TrafficMirroringProperties(); - assertThat(properties.isEnabled()).isTrue(); + assertThat(properties.isEnabled()).isFalse(); assertThat(properties.getRequestPoolSize()).isEqualTo(100); assertThat(properties.getRequestConnectionTimeout()).isEqualTo(5000L); } @@ -40,9 +40,9 @@ public class TrafficMirroringPropertiesTest { void testEnabledProperty() { TrafficMirroringProperties properties = new TrafficMirroringProperties(); - properties.setEnabled(false); + properties.setEnabled(true); - assertThat(properties.isEnabled()).isFalse(); + assertThat(properties.isEnabled()).isTrue(); } @Test @@ -88,14 +88,14 @@ public class TrafficMirroringPropertiesTest { @Test void testToString() { TrafficMirroringProperties properties = new TrafficMirroringProperties(); - properties.setEnabled(false); + properties.setEnabled(true); properties.setRequestPoolSize(8); properties.setRequestConnectionTimeout(2000); String result = properties.toString(); assertThat(result) - .contains("enabled=false") + .contains("enabled=true") .contains("requestPoolSize=8") .contains("requestConnectionTimeout=2000"); } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/beanprocessor/BlockingLoadBalancerClientBeanPostProcessor.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/beanprocessor/BlockingLoadBalancerClientBeanPostProcessor.java index f48144b22..a0fab8185 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/beanprocessor/BlockingLoadBalancerClientBeanPostProcessor.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/beanprocessor/BlockingLoadBalancerClientBeanPostProcessor.java @@ -17,6 +17,7 @@ package com.tencent.cloud.rpc.enhancement.beanprocessor; +import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementProperties; import com.tencent.cloud.rpc.enhancement.instrument.resttemplate.PolarisBlockingLoadBalancerClient; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginRunner; @@ -54,7 +55,8 @@ public class BlockingLoadBalancerClientBeanPostProcessor implements BeanPostProc BlockingLoadBalancerClient delegate = (BlockingLoadBalancerClient) bean; ReactiveLoadBalancer.Factory requestFactory = this.factory.getBean(ReactiveLoadBalancer.Factory.class); EnhancedPluginRunner pluginRunner = this.factory.getBean(EnhancedPluginRunner.class); - return new PolarisBlockingLoadBalancerClient(requestFactory, delegate, pluginRunner); + RpcEnhancementProperties rpcEnhancementProperties = this.factory.getBean(RpcEnhancementProperties.class); + return new PolarisBlockingLoadBalancerClient(requestFactory, delegate, pluginRunner, rpcEnhancementProperties); } return bean; } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfiguration.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfiguration.java index 1e42c8e8a..58d5cb771 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfiguration.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementAutoConfiguration.java @@ -164,8 +164,8 @@ public class RpcEnhancementAutoConfiguration { protected static class PolarisFeignClientAutoConfiguration { @Bean - public EnhancedFeignBeanPostProcessor polarisFeignBeanPostProcessor(@Lazy EnhancedPluginRunner pluginRunner) { - return new EnhancedFeignBeanPostProcessor(pluginRunner); + public EnhancedFeignBeanPostProcessor polarisFeignBeanPostProcessor(@Lazy EnhancedPluginRunner pluginRunner, RpcEnhancementProperties rpcEnhancementProperties) { + return new EnhancedFeignBeanPostProcessor(pluginRunner, rpcEnhancementProperties); } @Bean diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementProperties.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementProperties.java new file mode 100644 index 000000000..22bf27cb0 --- /dev/null +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementProperties.java @@ -0,0 +1,55 @@ +/* + * Tencent is pleased to support the open source community by making spring-cloud-tencent available. + * + * Copyright (C) 2021 Tencent. 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.rpc.enhancement.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * Properties of RPC enhancement. + * + * @author Haotian Zhang + */ +@ConfigurationProperties("spring.cloud.tencent.rpc-enhancement") +public class RpcEnhancementProperties { + + /** + * Whether report call result to polaris. + */ + private boolean enabled = true; + + /** + * Whether to ignore the body of the request. + */ + private boolean ignoreBody = true; + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public boolean isIgnoreBody() { + return ignoreBody; + } + + public void setIgnoreBody(boolean ignoreBody) { + this.ignoreBody = ignoreBody; + } +} diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementPropertiesAutoConfiguration.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementPropertiesAutoConfiguration.java index 1f33f81f8..3ff720884 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementPropertiesAutoConfiguration.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementPropertiesAutoConfiguration.java @@ -34,6 +34,12 @@ import org.springframework.web.client.RestTemplate; @ConditionalOnPolarisEnabled public class RpcEnhancementPropertiesAutoConfiguration { + @Bean + @ConditionalOnMissingBean + public RpcEnhancementProperties rpcEnhancementProperties() { + return new RpcEnhancementProperties(); + } + @Bean @ConditionalOnMissingBean public RpcEnhancementReporterProperties rpcEnhancementReporterProperties() { diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementReporterProperties.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementReporterProperties.java index 94a20e4b8..b4439aadf 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementReporterProperties.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementReporterProperties.java @@ -25,7 +25,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.http.HttpStatus; /** - * Properties of Polaris CircuitBreaker . + * Properties of RPC enhancement reporter. * * @author Elve.Xu 2022-07-08 */ diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignBeanPostProcessor.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignBeanPostProcessor.java index 105a27df6..e8dc1cb59 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignBeanPostProcessor.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignBeanPostProcessor.java @@ -17,6 +17,7 @@ package com.tencent.cloud.rpc.enhancement.instrument.feign; +import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementProperties; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginRunner; import feign.Client; @@ -38,10 +39,13 @@ public class EnhancedFeignBeanPostProcessor implements BeanPostProcessor, BeanFa private final EnhancedPluginRunner pluginRunner; + private final RpcEnhancementProperties rpcEnhancementProperties; + private BeanFactory factory; - public EnhancedFeignBeanPostProcessor(EnhancedPluginRunner pluginRunner) { + public EnhancedFeignBeanPostProcessor(EnhancedPluginRunner pluginRunner, RpcEnhancementProperties rpcEnhancementProperties) { this.pluginRunner = pluginRunner; + this.rpcEnhancementProperties = rpcEnhancementProperties; } @Override @@ -77,7 +81,7 @@ public class EnhancedFeignBeanPostProcessor implements BeanPostProcessor, BeanFa } private EnhancedFeignClient createPolarisFeignClient(Client delegate) { - return new EnhancedFeignClient(delegate, pluginRunner); + return new EnhancedFeignClient(delegate, pluginRunner, rpcEnhancementProperties); } @Override diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignClient.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignClient.java index 23fd882cb..432be80de 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignClient.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignClient.java @@ -29,6 +29,7 @@ import java.util.Map; import com.tencent.cloud.common.constant.MetadataConstant; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; +import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementProperties; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginContext; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginRunner; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginType; @@ -61,9 +62,12 @@ public class EnhancedFeignClient implements Client { private final EnhancedPluginRunner pluginRunner; - public EnhancedFeignClient(Client target, EnhancedPluginRunner pluginRunner) { + private final RpcEnhancementProperties rpcEnhancementProperties; + + public EnhancedFeignClient(Client target, EnhancedPluginRunner pluginRunner, RpcEnhancementProperties rpcEnhancementProperties) { this.delegate = checkNotNull(target, "target"); this.pluginRunner = pluginRunner; + this.rpcEnhancementProperties = rpcEnhancementProperties; } @Override @@ -88,7 +92,7 @@ public class EnhancedFeignClient implements Client { .build(); enhancedPluginContext.setRequest(enhancedRequestContext); enhancedPluginContext.setOriginRequest(request); - if (request.body() != null) { + if (request.body() != null && !rpcEnhancementProperties.isIgnoreBody()) { enhancedPluginContext.setOriginBody(request.body()); } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/resttemplate/EnhancedRestTemplateBlockingLoadBalancerClientInterceptor.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/resttemplate/EnhancedRestTemplateBlockingLoadBalancerClientInterceptor.java index 8f7739504..90e16a60a 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/resttemplate/EnhancedRestTemplateBlockingLoadBalancerClientInterceptor.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/resttemplate/EnhancedRestTemplateBlockingLoadBalancerClientInterceptor.java @@ -25,6 +25,7 @@ import com.tencent.cloud.common.constant.ContextConstant; 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.rpc.enhancement.config.RpcEnhancementProperties; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginContext; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginRunner; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginType; @@ -56,9 +57,13 @@ public class EnhancedRestTemplateBlockingLoadBalancerClientInterceptor { private final LoadBalancerClient delegate; - public EnhancedRestTemplateBlockingLoadBalancerClientInterceptor(EnhancedPluginRunner pluginRunner, LoadBalancerClient delegate) { + private final RpcEnhancementProperties rpcEnhancementProperties; + + public EnhancedRestTemplateBlockingLoadBalancerClientInterceptor(EnhancedPluginRunner pluginRunner, + LoadBalancerClient delegate, RpcEnhancementProperties rpcEnhancementProperties) { this.pluginRunner = pluginRunner; this.delegate = delegate; + this.rpcEnhancementProperties = rpcEnhancementProperties; } @@ -84,7 +89,7 @@ public class EnhancedRestTemplateBlockingLoadBalancerClientInterceptor { .build(); enhancedPluginContext.setRequest(enhancedRequestContext); enhancedPluginContext.setOriginRequest(httpRequest); - if (body != null) { + if (body != null && !rpcEnhancementProperties.isIgnoreBody()) { enhancedPluginContext.setOriginBody(body); } diff --git a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/resttemplate/PolarisBlockingLoadBalancerClient.java b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/resttemplate/PolarisBlockingLoadBalancerClient.java index 226e68eb0..12304079e 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/resttemplate/PolarisBlockingLoadBalancerClient.java +++ b/spring-cloud-tencent-rpc-enhancement/src/main/java/com/tencent/cloud/rpc/enhancement/instrument/resttemplate/PolarisBlockingLoadBalancerClient.java @@ -19,6 +19,7 @@ package com.tencent.cloud.rpc.enhancement.instrument.resttemplate; import java.io.IOException; +import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementProperties; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginRunner; import org.springframework.cloud.client.ServiceInstance; @@ -36,13 +37,15 @@ import org.springframework.http.HttpRequest; public class PolarisBlockingLoadBalancerClient extends BlockingLoadBalancerClient { private final EnhancedPluginRunner enhancedPluginRunner; - private BlockingLoadBalancerClient delegate; + private final BlockingLoadBalancerClient delegate; + private final RpcEnhancementProperties rpcEnhancementProperties; public PolarisBlockingLoadBalancerClient(ReactiveLoadBalancer.Factory loadBalancerClientFactory, - BlockingLoadBalancerClient delegate, EnhancedPluginRunner enhancedPluginRunner) { + BlockingLoadBalancerClient delegate, EnhancedPluginRunner enhancedPluginRunner, RpcEnhancementProperties rpcEnhancementProperties) { super(loadBalancerClientFactory); this.delegate = delegate; this.enhancedPluginRunner = enhancedPluginRunner; + this.rpcEnhancementProperties = rpcEnhancementProperties; } /** @@ -55,7 +58,7 @@ public class PolarisBlockingLoadBalancerClient extends BlockingLoadBalancerClien return delegate.execute(serviceId, request); } byte[] body = LoadBalancerUtils.getHttpBodyIfAvailable(request); - EnhancedRestTemplateBlockingLoadBalancerClientInterceptor enhancedRestTemplateBlockingLoadBalancerClientInterceptor = new EnhancedRestTemplateBlockingLoadBalancerClientInterceptor(enhancedPluginRunner, delegate); + EnhancedRestTemplateBlockingLoadBalancerClientInterceptor enhancedRestTemplateBlockingLoadBalancerClientInterceptor = new EnhancedRestTemplateBlockingLoadBalancerClientInterceptor(enhancedPluginRunner, delegate, rpcEnhancementProperties); return enhancedRestTemplateBlockingLoadBalancerClientInterceptor.intercept(httpRequest, body, serviceId, null, request); } @@ -69,7 +72,7 @@ public class PolarisBlockingLoadBalancerClient extends BlockingLoadBalancerClien return delegate.execute(serviceId, serviceInstance, request); } byte[] body = LoadBalancerUtils.getHttpBodyIfAvailable(request); - EnhancedRestTemplateBlockingLoadBalancerClientInterceptor enhancedRestTemplateBlockingLoadBalancerClientInterceptor = new EnhancedRestTemplateBlockingLoadBalancerClientInterceptor(enhancedPluginRunner, delegate); + EnhancedRestTemplateBlockingLoadBalancerClientInterceptor enhancedRestTemplateBlockingLoadBalancerClientInterceptor = new EnhancedRestTemplateBlockingLoadBalancerClientInterceptor(enhancedPluginRunner, delegate, rpcEnhancementProperties); return enhancedRestTemplateBlockingLoadBalancerClientInterceptor.intercept(httpRequest, body, serviceId, serviceInstance, request); } } diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementPropertiesTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementPropertiesTest.java new file mode 100644 index 000000000..cafd558bf --- /dev/null +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/config/RpcEnhancementPropertiesTest.java @@ -0,0 +1,60 @@ +/* + * Tencent is pleased to support the open source community by making spring-cloud-tencent available. + * + * Copyright (C) 2021 Tencent. 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.rpc.enhancement.config; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test For {@link RpcEnhancementProperties}. + * + * @author Haotian Zhang + */ +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = RpcEnhancementPropertiesTest.TestApplication.class, properties = { + "spring.application.name=test", + "spring.cloud.gateway.enabled=false", + "spring.cloud.tencent.rpc-enhancement=true", + "spring.cloud.tencent.rpc-enhancement.ignore-body=false" +}) +@ActiveProfiles("test") +public class RpcEnhancementPropertiesTest { + + @Autowired + private RpcEnhancementProperties rpcEnhancementProperties; + + @Test + public void testDefaultInitialization() { + assertThat(rpcEnhancementProperties).isNotNull(); + assertThat(rpcEnhancementProperties.isEnabled()).isTrue(); + assertThat(rpcEnhancementProperties.isIgnoreBody()).isFalse(); + } + + @SpringBootApplication + protected static class TestApplication { + + } +} diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignBeanPostProcessorTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignBeanPostProcessorTest.java index 30d8ced70..89a360a41 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignBeanPostProcessorTest.java +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignBeanPostProcessorTest.java @@ -17,6 +17,7 @@ package com.tencent.cloud.rpc.enhancement.instrument.feign; +import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementProperties; import feign.Client; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -44,7 +45,7 @@ public class EnhancedFeignBeanPostProcessorTest { @BeforeEach void setUp() { - enhancedFeignBeanPostProcessor = new EnhancedFeignBeanPostProcessor(null); + enhancedFeignBeanPostProcessor = new EnhancedFeignBeanPostProcessor(null, null); } @Test @@ -61,6 +62,9 @@ public class EnhancedFeignBeanPostProcessorTest { if (clazz.equals(LoadBalancerClientFactory.class)) { return mock(LoadBalancerClientFactory.class); } + if (RpcEnhancementProperties.class.equals(clazz)) { + return mock(RpcEnhancementProperties.class); + } return null; }).when(beanFactory).getBean(any(Class.class)); enhancedFeignBeanPostProcessor.setBeanFactory(beanFactory); diff --git a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignClientTest.java b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignClientTest.java index fffa2f732..eec56a45c 100644 --- a/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignClientTest.java +++ b/spring-cloud-tencent-rpc-enhancement/src/test/java/com/tencent/cloud/rpc/enhancement/instrument/feign/EnhancedFeignClientTest.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.List; import com.tencent.cloud.polaris.context.PolarisSDKContextManager; +import com.tencent.cloud.rpc.enhancement.config.RpcEnhancementProperties; import com.tencent.cloud.rpc.enhancement.plugin.DefaultEnhancedPluginRunner; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPlugin; import com.tencent.cloud.rpc.enhancement.plugin.EnhancedPluginContext; @@ -67,7 +68,7 @@ public class EnhancedFeignClientTest { @Test public void testConstructor() { try { - new EnhancedFeignClient(null, null); + new EnhancedFeignClient(null, null, null); fail("NullPointerException should be thrown."); } catch (Throwable e) { @@ -76,7 +77,7 @@ public class EnhancedFeignClientTest { } try { - new EnhancedFeignClient(mock(Client.class), null); + new EnhancedFeignClient(mock(Client.class), null, null); } catch (Throwable e) { fail("Exception encountered.", e); @@ -85,7 +86,8 @@ public class EnhancedFeignClientTest { List enhancedPlugins = getMockEnhancedFeignPlugins(); try { new EnhancedFeignClient(mock(Client.class), - new DefaultEnhancedPluginRunner(enhancedPlugins, new ArrayList<>(), polarisSDKContextManager.getSDKContext())); + new DefaultEnhancedPluginRunner(enhancedPlugins, new ArrayList<>(), polarisSDKContextManager.getSDKContext()), + new RpcEnhancementProperties()); } catch (Throwable e) { fail("Exception encountered.", e); @@ -115,7 +117,8 @@ public class EnhancedFeignClientTest { requestTemplate.feignTarget(target); EnhancedFeignClient polarisFeignClient = new EnhancedFeignClient(delegate, - new DefaultEnhancedPluginRunner(getMockEnhancedFeignPlugins(), new ArrayList<>(), polarisSDKContextManager.getSDKContext())); + new DefaultEnhancedPluginRunner(getMockEnhancedFeignPlugins(), new ArrayList<>(), polarisSDKContextManager.getSDKContext()), + new RpcEnhancementProperties()); // 200 Response response = polarisFeignClient.execute(Request.create(Request.HttpMethod.GET, "http://localhost:8080/test", @@ -162,7 +165,8 @@ public class EnhancedFeignClientTest { requestTemplate.feignTarget(target); EnhancedFeignClient polarisFeignClient = new EnhancedFeignClient(delegate, - new DefaultEnhancedPluginRunner(getMockCallAbortedExceptionEnhancedFeignPlugins(null), new ArrayList<>(), polarisSDKContextManager.getSDKContext())); + new DefaultEnhancedPluginRunner(getMockCallAbortedExceptionEnhancedFeignPlugins(null), new ArrayList<>(), polarisSDKContextManager.getSDKContext()), + new RpcEnhancementProperties()); // Exception try { @@ -177,7 +181,8 @@ public class EnhancedFeignClientTest { polarisFeignClient = new EnhancedFeignClient(delegate, new DefaultEnhancedPluginRunner(getMockCallAbortedExceptionEnhancedFeignPlugins( - new CircuitBreakerStatus.FallbackInfo(200, new HashMap<>(), "mock ok")), new ArrayList<>(), polarisSDKContextManager.getSDKContext())); + new CircuitBreakerStatus.FallbackInfo(200, new HashMap<>(), "mock ok")), new ArrayList<>(), polarisSDKContextManager.getSDKContext()), + new RpcEnhancementProperties()); // fallback 200 Response response = polarisFeignClient.execute(Request.create(Request.HttpMethod.GET, "http://localhost:8080/test",