From fdc9509d3cfb02aa09d41c507b5adf6b23e823d1 Mon Sep 17 00:00:00 2001 From: Haotian Zhang <928016560@qq.com> Date: Tue, 14 Feb 2023 19:24:57 +0800 Subject: [PATCH] refactor:move loadbalancer to discovery module. (#844) * refactor:move loadbalancer to discovery module. * fix:fix config rebinder bean conflict. --- CHANGELOG.md | 1 + README-zh.md | 2 +- README.md | 2 +- pom.xml | 1 - .../pom.xml | 5 - .../PolarisConfigAutoConfiguration.java | 3 +- .../annotation/SpringValueProcessorTest.java | 3 + .../pom.xml | 16 +-- .../loadbalancer/PolarisLoadBalancer.java | 10 +- .../PolarisLoadBalancerAutoConfiguration.java | 16 +-- ...olarisLoadBalancerClientConfiguration.java | 55 +++++++++ ...itional-spring-configuration-metadata.json | 12 ++ .../main/resources/META-INF/spring.factories | 3 +- ...arisLoadBalancerAutoConfigurationTest.java | 30 +++-- .../loadbalancer/PolarisLoadBalancerTest.java | 8 +- .../PolarisRouterAutoConfigurationTest.java | 21 +--- .../pom.xml | 4 - ...arisRouterServiceInstanceListSupplier.java | 3 +- .../cloud/polaris/router/RouterUtils.java | 11 +- ...RouterServiceInstanceListSupplierTest.java | 6 +- .../cloud/polaris/router/RouterUtilsTest.java | 11 +- .../config/LoadBalancerConfigurationTest.java | 6 +- spring-cloud-tencent-coverage/pom.xml | 5 - spring-cloud-tencent-dependencies/pom.xml | 6 - .../polaris-circuitbreaker-example-a/pom.xml | 5 - .../example/ServiceAController.java | 10 +- .../src/main/resources/ESAPI.properties | 14 --- .../discovery-caller-service/pom.xml | 5 - .../gateway-callee-service/pom.xml | 5 - .../callee/GatewayCalleeController.java | 8 +- .../src/main/resources/ESAPI.properties | 14 --- .../gateway-callee-service2/pom.xml | 12 +- .../callee/GatewayCalleeController.java | 8 +- .../src/main/resources/ESAPI.properties | 14 --- .../gateway-scg-service/pom.xml | 5 - .../router-callee-service1/pom.xml | 5 - .../example/RouterCalleeController.java | 11 +- .../src/main/resources/ESAPI.properties | 14 --- .../router-callee-service2/pom.xml | 5 - .../example/RouterCalleeController.java | 11 +- .../src/main/resources/ESAPI.properties | 14 --- spring-cloud-tencent-examples/pom.xml | 11 -- spring-cloud-tencent-polaris-context/pom.xml | 5 + .../PolarisContextAutoConfiguration.java | 7 ++ .../pom.xml | 72 ------------ .../PolarisServiceInstanceListSupplier.java | 81 -------------- ...olarisLoadBalancerClientConfiguration.java | 104 ------------------ .../config/PolarisLoadBalancerProperties.java | 76 ------------- ...itional-spring-configuration-metadata.json | 22 ---- .../main/resources/META-INF/spring.factories | 2 - ...olarisServiceInstanceListSupplierTest.java | 94 ---------------- spring-cloud-tencent-rpc-enhancement/pom.xml | 7 +- 52 files changed, 152 insertions(+), 729 deletions(-) rename {spring-cloud-tencent-polaris-loadbalancer => spring-cloud-starter-tencent-polaris-discovery}/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java (91%) rename {spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config => spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer}/PolarisLoadBalancerAutoConfiguration.java (74%) create mode 100644 spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java rename {spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config => spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer}/PolarisLoadBalancerAutoConfigurationTest.java (74%) rename {spring-cloud-tencent-polaris-loadbalancer => spring-cloud-starter-tencent-polaris-discovery}/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerTest.java (93%) rename {spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config => spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer}/PolarisRouterAutoConfigurationTest.java (65%) rename spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java => spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/RouterUtils.java (93%) rename spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtilsTest.java => spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/RouterUtilsTest.java (91%) delete mode 100644 spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/ESAPI.properties delete mode 100644 spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/resources/ESAPI.properties delete mode 100644 spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/resources/ESAPI.properties delete mode 100644 spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/src/main/resources/ESAPI.properties delete mode 100644 spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/src/main/resources/ESAPI.properties delete mode 100644 spring-cloud-tencent-polaris-loadbalancer/pom.xml delete mode 100644 spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java delete mode 100644 spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java delete mode 100644 spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerProperties.java delete mode 100644 spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/additional-spring-configuration-metadata.json delete mode 100644 spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/spring.factories delete mode 100644 spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplierTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index e3db3bbf8..d63962f38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,3 +3,4 @@ - [docs:Add code coverage blocking.](https://github.com/Tencent/spring-cloud-tencent/pull/836) - [docs:Add license checker GitHub Action.](https://github.com/Tencent/spring-cloud-tencent/pull/839) +- [refactor:move loadbalancer to discovery module.](https://github.com/Tencent/spring-cloud-tencent/pull/844) diff --git a/README-zh.md b/README-zh.md index e94af3506..5b61abfa6 100644 --- a/README-zh.md +++ b/README-zh.md @@ -79,7 +79,7 @@ Spring Cloud Tencent 所有组件都已上传到 Maven 中央仓库,只需要 <groupId>com.tencent.cloud</groupId> <artifactId>spring-cloud-tencent-dependencies</artifactId> <!--version number--> - <version>1.9.0-2021.0.5</version> + <version>1.9.1-2021.0.5</version> <type>pom</type> <scope>import</scope> </dependency> diff --git a/README.md b/README.md index 76e275a00..f45a22251 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ For example: <groupId>com.tencent.cloud</groupId> <artifactId>spring-cloud-tencent-dependencies</artifactId> <!--version number--> - <version>1.9.0-2021.0.5</version> + <version>1.9.1-2021.0.5</version> <type>pom</type> <scope>import</scope> </dependency> diff --git a/pom.xml b/pom.xml index 341dbfb6e..c72800479 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,6 @@ <module>spring-cloud-tencent-commons</module> <module>spring-cloud-tencent-polaris-context</module> <module>spring-cloud-tencent-rpc-enhancement</module> - <module>spring-cloud-tencent-polaris-loadbalancer</module> <module>spring-cloud-starter-tencent-metadata-transfer</module> <module>spring-cloud-starter-tencent-polaris-config</module> <module>spring-cloud-starter-tencent-polaris-discovery</module> diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml b/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml index 20bf4bdf2..dce497bd1 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml @@ -14,11 +14,6 @@ <dependencies> <!-- Spring Cloud Tencent dependencies start --> - <dependency> - <groupId>com.tencent.cloud</groupId> - <artifactId>spring-cloud-tencent-polaris-loadbalancer</artifactId> - </dependency> - <dependency> <groupId>com.tencent.cloud</groupId> <artifactId>spring-cloud-tencent-rpc-enhancement</artifactId> diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/PolarisConfigAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/PolarisConfigAutoConfiguration.java index aa3198435..f336be29c 100644 --- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/PolarisConfigAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/PolarisConfigAutoConfiguration.java @@ -39,6 +39,7 @@ import org.springframework.cloud.context.properties.ConfigurationPropertiesRebin import org.springframework.cloud.context.refresh.ContextRefresher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; /** * polaris config module auto configuration at init application context phase. @@ -60,7 +61,7 @@ public class PolarisConfigAutoConfiguration { } @Bean - @ConditionalOnMissingBean(search = SearchStrategy.CURRENT) + @Primary @ConditionalOnReflectRefreshType public ConfigurationPropertiesRebinder affectedConfigurationPropertiesRebinder( ConfigurationPropertiesBeans beans) { diff --git a/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/spring/annotation/SpringValueProcessorTest.java b/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/spring/annotation/SpringValueProcessorTest.java index b4bd33afd..3a09233ba 100644 --- a/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/spring/annotation/SpringValueProcessorTest.java +++ b/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/spring/annotation/SpringValueProcessorTest.java @@ -81,6 +81,7 @@ public class SpringValueProcessorTest { .withConfiguration(AutoConfigurations.of(RefreshAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(ValueTest.class)) .withConfiguration(AutoConfigurations.of(PolarisConfigAutoConfiguration.class)) + .withAllowBeanDefinitionOverriding(true) .withPropertyValues("spring.application.name=" + "conditionalOnConfigReflectEnabledTest") .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081") .withPropertyValues("spring.cloud.polaris.config.refresh-type=" + RefreshType.REFLECT) @@ -114,6 +115,7 @@ public class SpringValueProcessorTest { .withConfiguration(AutoConfigurations.of(RefreshAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(ValueTest.class)) .withConfiguration(AutoConfigurations.of(PolarisConfigAutoConfiguration.class)) + .withAllowBeanDefinitionOverriding(true) .withPropertyValues("spring.application.name=" + "conditionalOnConfigReflectEnabledTest") .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081") .withPropertyValues("spring.cloud.polaris.config.refresh-type=" + RefreshType.REFLECT) @@ -147,6 +149,7 @@ public class SpringValueProcessorTest { .withConfiguration(AutoConfigurations.of(RefreshAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(XMLBeamDefinitionTest.class)) .withConfiguration(AutoConfigurations.of(PolarisConfigAutoConfiguration.class)) + .withAllowBeanDefinitionOverriding(true) .withPropertyValues("spring.application.name=" + "conditionalOnConfigReflectEnabledTest") .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081") .withPropertyValues("spring.cloud.polaris.config.refresh-type=" + RefreshType.REFLECT) diff --git a/spring-cloud-starter-tencent-polaris-discovery/pom.xml b/spring-cloud-starter-tencent-polaris-discovery/pom.xml index a25d29874..2d52c28f1 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/pom.xml +++ b/spring-cloud-starter-tencent-polaris-discovery/pom.xml @@ -15,10 +15,6 @@ <dependencies> <!-- Spring Cloud Tencent dependencies start --> - <dependency> - <groupId>com.tencent.cloud</groupId> - <artifactId>spring-cloud-tencent-polaris-loadbalancer</artifactId> - </dependency> <dependency> <groupId>com.tencent.cloud</groupId> <artifactId>spring-cloud-tencent-rpc-enhancement</artifactId> @@ -39,12 +35,6 @@ </dependency> <!-- Polaris dependencies end --> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-loadbalancer</artifactId> - <optional>true</optional> - </dependency> - <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> @@ -75,6 +65,12 @@ <optional>true</optional> </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-inline</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java similarity index 91% rename from spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java rename to spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java index 87475d5af..03057a4fe 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancer.java @@ -22,7 +22,6 @@ import java.util.stream.Collectors; import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.pojo.PolarisServiceInstance; -import com.tencent.cloud.polaris.loadbalancer.config.PolarisLoadBalancerProperties; import com.tencent.polaris.api.config.consumer.LoadBalanceConfig; import com.tencent.polaris.api.pojo.DefaultServiceInstances; import com.tencent.polaris.api.pojo.Instance; @@ -57,18 +56,14 @@ public class PolarisLoadBalancer extends RoundRobinLoadBalancer { private final String serviceId; - private final PolarisLoadBalancerProperties loadBalancerProperties; - private final RouterAPI routerAPI; private final ObjectProvider<ServiceInstanceListSupplier> supplierObjectProvider; - public PolarisLoadBalancer(String serviceId, ObjectProvider<ServiceInstanceListSupplier> supplierObjectProvider, - PolarisLoadBalancerProperties loadBalancerProperties, RouterAPI routerAPI) { + public PolarisLoadBalancer(String serviceId, ObjectProvider<ServiceInstanceListSupplier> supplierObjectProvider, RouterAPI routerAPI) { super(supplierObjectProvider, serviceId); this.serviceId = serviceId; this.supplierObjectProvider = supplierObjectProvider; - this.loadBalancerProperties = loadBalancerProperties; this.routerAPI = routerAPI; } @@ -82,9 +77,6 @@ public class PolarisLoadBalancer extends RoundRobinLoadBalancer { @Override public Mono<Response<ServiceInstance>> choose(Request request) { - if (!loadBalancerProperties.getEnabled()) { - return super.choose(request); - } ServiceInstanceListSupplier supplier = supplierObjectProvider .getIfAvailable(NoopServiceInstanceListSupplier::new); return supplier.get(request).next().map(this::getInstanceResponse); diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfiguration.java similarity index 74% rename from spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfiguration.java rename to spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfiguration.java index 33654e771..38f1e0dfa 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfiguration.java @@ -15,13 +15,9 @@ * specific language governing permissions and limitations under the License. */ -package com.tencent.cloud.polaris.loadbalancer.config; +package com.tencent.cloud.polaris.loadbalancer; import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled; -import com.tencent.polaris.api.exception.PolarisException; -import com.tencent.polaris.client.api.SDKContext; -import com.tencent.polaris.factory.api.RouterAPIFactory; -import com.tencent.polaris.router.api.core.RouterAPI; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -29,7 +25,6 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled; import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients; import org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** @@ -46,13 +41,4 @@ import org.springframework.context.annotation.Configuration; @LoadBalancerClients(defaultConfiguration = PolarisLoadBalancerClientConfiguration.class) public class PolarisLoadBalancerAutoConfiguration { - @Bean - public PolarisLoadBalancerProperties polarisLoadBalancerProperties() { - return new PolarisLoadBalancerProperties(); - } - - @Bean - public RouterAPI polarisRouter(SDKContext polarisContext) throws PolarisException { - return RouterAPIFactory.createRouterAPIByContext(polarisContext); - } } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java new file mode 100644 index 000000000..64f8b8798 --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java @@ -0,0 +1,55 @@ +/* + * 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.polaris.loadbalancer; + +import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled; +import com.tencent.polaris.router.api.core.RouterAPI; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; + +/** + * Configuration of loadbalancer client. + * + * @author <a href="mailto:liaochuntao@live.com">liaochuntao</a> + */ +@Configuration(proxyBeanMethods = false) +@ConditionalOnPolarisEnabled +@ConditionalOnDiscoveryEnabled +public class PolarisLoadBalancerClientConfiguration { + + private final static String STRATEGY_WEIGHT = "polarisWeighted"; + + @Bean + @ConditionalOnMissingBean + @ConditionalOnProperty(value = "spring.cloud.polaris.loadbalancer.strategy", havingValue = STRATEGY_WEIGHT) + public ReactorLoadBalancer<ServiceInstance> polarisLoadBalancer(Environment environment, + LoadBalancerClientFactory loadBalancerClientFactory, RouterAPI routerAPI) { + String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); + return new PolarisLoadBalancer(name, + loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), routerAPI); + } +} diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 12a535855..f5c547207 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -66,6 +66,18 @@ "defaultValue": 60000, "description": "Millis interval of refresh of service info list. Default: 60000." }, + { + "name": "spring.cloud.polaris.loadbalancer.enabled", + "type": "java.lang.Boolean", + "defaultValue": "true", + "description": "polaris loadbalancer." + }, + { + "name": "spring.cloud.polaris.loadbalancer.strategy", + "type": "java.lang.String", + "defaultValue": "random", + "description": "retry,best_available,availability_filtering,round_robin,weighted_response_time,zone_avoidance,random,consistent_hash,weighted_random." + }, { "name": "spring.cloud.nacos.discovery.enabled", "type": "java.lang.Boolean", diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring.factories b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring.factories index 4412276d8..2a404639c 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring.factories @@ -2,6 +2,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.tencent.cloud.polaris.DiscoveryPropertiesAutoConfiguration,\ com.tencent.cloud.polaris.discovery.PolarisDiscoveryAutoConfiguration,\ com.tencent.cloud.polaris.registry.PolarisServiceRegistryAutoConfiguration,\ - com.tencent.cloud.polaris.endpoint.PolarisDiscoveryEndpointAutoConfiguration + com.tencent.cloud.polaris.endpoint.PolarisDiscoveryEndpointAutoConfiguration,\ + com.tencent.cloud.polaris.loadbalancer.PolarisLoadBalancerAutoConfiguration org.springframework.cloud.bootstrap.BootstrapConfiguration=\ com.tencent.cloud.polaris.DiscoveryPropertiesBootstrapAutoConfiguration diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfigurationTest.java b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfigurationTest.java similarity index 74% rename from spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfigurationTest.java rename to spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfigurationTest.java index 2e1ec86e1..9bce63538 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfigurationTest.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerAutoConfigurationTest.java @@ -15,7 +15,7 @@ * specific language governing permissions and limitations under the License. */ -package com.tencent.cloud.polaris.loadbalancer.config; +package com.tencent.cloud.polaris.loadbalancer; import com.tencent.cloud.polaris.context.config.PolarisContextAutoConfiguration; import com.tencent.polaris.router.api.core.RouterAPI; @@ -24,11 +24,15 @@ import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; import static com.tencent.polaris.test.common.Consts.PORT; import static com.tencent.polaris.test.common.Consts.SERVICE_PROVIDER; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.fail; /** * Test for {@link PolarisLoadBalancerAutoConfiguration}. @@ -38,25 +42,37 @@ import static org.assertj.core.api.Assertions.assertThat; public class PolarisLoadBalancerAutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withPropertyValues("spring.application.name=" + SERVICE_PROVIDER) + .withPropertyValues("server.port=" + PORT) + .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081") + .withPropertyValues("spring.cloud.polaris.loadbalancer.strategy=polarisWeighted") .withConfiguration(AutoConfigurations.of( PolarisRibbonTest.class, PolarisLoadBalancerAutoConfiguration.class, - PolarisContextAutoConfiguration.class)) - .withPropertyValues("spring.application.name=" + SERVICE_PROVIDER) - .withPropertyValues("server.port=" + PORT) - .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081"); + PolarisContextAutoConfiguration.class)); @Test public void testDefaultInitialization() { this.contextRunner.run(context -> { assertThat(context).hasSingleBean(RouterAPI.class); - assertThat(context).hasSingleBean(PolarisLoadBalancerProperties.class); + assertThat(context).hasSingleBean(RestTemplate.class); + try { + context.getBean(RestTemplate.class).getForEntity("http://wrong.url", String.class); + fail(); + } + catch (Exception e) { + // do nothing + } }); } @Configuration @EnableAutoConfiguration static class PolarisRibbonTest { - + @Bean + @LoadBalanced + public RestTemplate restTemplate() { + return new RestTemplate(); + } } } diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerTest.java b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerTest.java similarity index 93% rename from spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerTest.java rename to spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerTest.java index 54b2ac26a..18fc952f9 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerTest.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerTest.java @@ -23,7 +23,6 @@ import java.util.List; import com.tencent.cloud.common.pojo.PolarisServiceInstance; import com.tencent.cloud.common.util.ApplicationContextAwareUtils; -import com.tencent.cloud.polaris.loadbalancer.config.PolarisLoadBalancerProperties; import com.tencent.polaris.api.pojo.Instance; import com.tencent.polaris.router.api.core.RouterAPI; import com.tencent.polaris.router.api.rpc.ProcessLoadBalanceResponse; @@ -66,8 +65,6 @@ public class PolarisLoadBalancerTest { private RouterAPI routerAPI; @Mock private ObjectProvider<ServiceInstanceListSupplier> supplierObjectProvider; - @Mock - private PolarisLoadBalancerProperties loadBalancerProperties; @BeforeClass public static void beforeClass() { @@ -95,19 +92,16 @@ public class PolarisLoadBalancerTest { when(serviceInstanceListSupplier.get(request)).thenReturn(Flux.just(mockInstanceList)); when(supplierObjectProvider.getIfAvailable(any())).thenReturn(serviceInstanceListSupplier); - when(loadBalancerProperties.getEnabled()).thenReturn(true); ProcessLoadBalanceResponse mockLbRes = new ProcessLoadBalanceResponse(testInstance); when(routerAPI.processLoadBalance(any())).thenReturn(mockLbRes); // request construct and execute invoke - PolarisLoadBalancer polarisLoadBalancer = new PolarisLoadBalancer(LOCAL_SERVICE, supplierObjectProvider, - loadBalancerProperties, routerAPI); + PolarisLoadBalancer polarisLoadBalancer = new PolarisLoadBalancer(LOCAL_SERVICE, supplierObjectProvider, routerAPI); Mono<Response<ServiceInstance>> responseMono = polarisLoadBalancer.choose(request); ServiceInstance serviceInstance = responseMono.block().getServer(); // verify method has invoked - verify(loadBalancerProperties).getEnabled(); verify(supplierObjectProvider).getIfAvailable(any()); //result assert diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRouterAutoConfigurationTest.java b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisRouterAutoConfigurationTest.java similarity index 65% rename from spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRouterAutoConfigurationTest.java rename to spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisRouterAutoConfigurationTest.java index a78bdcf8b..b9e5a4a08 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRouterAutoConfigurationTest.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisRouterAutoConfigurationTest.java @@ -15,10 +15,9 @@ * specific language governing permissions and limitations under the License. */ -package com.tencent.cloud.polaris.loadbalancer.config; +package com.tencent.cloud.polaris.loadbalancer; import com.tencent.cloud.polaris.context.config.PolarisContextAutoConfiguration; -import com.tencent.cloud.polaris.loadbalancer.PolarisServiceInstanceListSupplier; import com.tencent.polaris.router.api.core.RouterAPI; import org.junit.Test; @@ -40,16 +39,14 @@ public class PolarisRouterAutoConfigurationTest { .withConfiguration(AutoConfigurations.of( PolarisLoadBalancerTest.class, PolarisContextAutoConfiguration.class, - PolarisLoadBalancerAutoConfiguration.class, - PolarisLoadBalancerClientConfiguration.PolarisBlockingSupportConfiguration.class)) + PolarisLoadBalancerAutoConfiguration.class)) .withPropertyValues("spring.cloud.loadbalancer.configurations=polaris"); private final ApplicationContextRunner noPolarisContextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of( PolarisLoadBalancerTest.class, PolarisContextAutoConfiguration.class, - PolarisLoadBalancerAutoConfiguration.class, - PolarisLoadBalancerClientConfiguration.PolarisBlockingSupportConfiguration.class)); + PolarisLoadBalancerAutoConfiguration.class)); /** * Test for BlockingDiscovery. @@ -58,12 +55,6 @@ public class PolarisRouterAutoConfigurationTest { public void test1() { this.blockingContextRunner.run(context -> { assertThat(context).hasSingleBean(RouterAPI.class); - assertThat(context).hasSingleBean(PolarisLoadBalancerProperties.class); - assertThat(context) - .doesNotHaveBean(PolarisLoadBalancerClientConfiguration.PolarisReactiveSupportConfiguration.class); - assertThat(context) - .hasSingleBean(PolarisLoadBalancerClientConfiguration.PolarisBlockingSupportConfiguration.class); - assertThat(context).doesNotHaveBean(PolarisServiceInstanceListSupplier.class); }); } @@ -74,12 +65,6 @@ public class PolarisRouterAutoConfigurationTest { public void test2() { this.noPolarisContextRunner.run(context -> { assertThat(context).hasSingleBean(RouterAPI.class); - assertThat(context).hasSingleBean(PolarisLoadBalancerProperties.class); - assertThat(context) - .doesNotHaveBean(PolarisLoadBalancerClientConfiguration.PolarisReactiveSupportConfiguration.class); - assertThat(context) - .hasSingleBean(PolarisLoadBalancerClientConfiguration.PolarisBlockingSupportConfiguration.class); - assertThat(context).doesNotHaveBean(PolarisServiceInstanceListSupplier.class); }); } diff --git a/spring-cloud-starter-tencent-polaris-router/pom.xml b/spring-cloud-starter-tencent-polaris-router/pom.xml index 550000502..f9ceeccaf 100644 --- a/spring-cloud-starter-tencent-polaris-router/pom.xml +++ b/spring-cloud-starter-tencent-polaris-router/pom.xml @@ -15,10 +15,6 @@ <dependencies> <!-- Spring Cloud Tencent dependencies start --> - <dependency> - <groupId>com.tencent.cloud</groupId> - <artifactId>spring-cloud-tencent-polaris-loadbalancer</artifactId> - </dependency> <dependency> <groupId>com.tencent.cloud</groupId> <artifactId>spring-cloud-tencent-rpc-enhancement</artifactId> 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 b87b87e25..dddc69652 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 @@ -32,7 +32,6 @@ import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.pojo.PolarisServiceInstance; import com.tencent.cloud.common.util.JacksonUtils; -import com.tencent.cloud.polaris.loadbalancer.LoadBalancerUtils; import com.tencent.cloud.polaris.router.resttemplate.PolarisLoadBalancerRequest; import com.tencent.cloud.polaris.router.spi.RouterRequestInterceptor; import com.tencent.cloud.polaris.router.spi.RouterResponseInterceptor; @@ -142,7 +141,7 @@ public class PolarisRouterServiceInstanceListSupplier extends DelegatingServiceI } Flux<List<ServiceInstance>> doRouter(Flux<List<ServiceInstance>> allServers, PolarisRouterContext routerContext) { - ServiceInstances serviceInstances = LoadBalancerUtils.transferServersToServiceInstances(allServers); + ServiceInstances serviceInstances = RouterUtils.transferServersToServiceInstances(allServers); List<ServiceInstance> filteredInstances = new ArrayList<>(); if (serviceInstances.getInstances().size() > 0) { diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/RouterUtils.java similarity index 93% rename from spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java rename to spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/RouterUtils.java index 91078a05e..650784302 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtils.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/RouterUtils.java @@ -13,10 +13,9 @@ * 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.polaris.loadbalancer; +package com.tencent.cloud.polaris.router; import java.util.Collections; import java.util.List; @@ -44,12 +43,12 @@ import org.springframework.util.CollectionUtils; * * @author lepdou 2022-05-17 */ -public final class LoadBalancerUtils { - private static final Logger LOGGER = LoggerFactory.getLogger(LoadBalancerUtils.class); +public final class RouterUtils { + private static final Logger LOGGER = LoggerFactory.getLogger(RouterUtils.class); private static final int WAIT_TIME = 3; - private LoadBalancerUtils() { + private RouterUtils() { } /** @@ -65,7 +64,7 @@ public final class LoadBalancerUtils { servers.subscribe(serviceInstances -> { instancesRef.set(serviceInstances .stream() - .map(LoadBalancerUtils::transferServerToServiceInstance) + .map(RouterUtils::transferServerToServiceInstance) .collect(Collectors.toList())); latch.countDown(); diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplierTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplierTest.java index 6f1fed719..08a576c8a 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplierTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplierTest.java @@ -32,7 +32,6 @@ import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.pojo.PolarisServiceInstance; import com.tencent.cloud.common.util.ApplicationContextAwareUtils; -import com.tencent.cloud.polaris.loadbalancer.config.PolarisLoadBalancerProperties; import com.tencent.cloud.polaris.router.config.properties.PolarisMetadataRouterProperties; import com.tencent.cloud.polaris.router.config.properties.PolarisNearByRouterProperties; import com.tencent.cloud.polaris.router.config.properties.PolarisRuleBasedRouterProperties; @@ -93,8 +92,6 @@ public class PolarisRouterServiceInstanceListSupplierTest { @Mock private ServiceInstanceListSupplier delegate; @Mock - private PolarisLoadBalancerProperties polarisLoadBalancerProperties; - @Mock private PolarisNearByRouterProperties polarisNearByRouterProperties; @Mock private PolarisMetadataRouterProperties polarisMetadataRouterProperties; @@ -247,7 +244,8 @@ public class PolarisRouterServiceInstanceListSupplierTest { // mock try (MockedStatic<ApplicationContextAwareUtils> mockedApplicationContextAwareUtils = Mockito.mockStatic(ApplicationContextAwareUtils.class)) { - mockedApplicationContextAwareUtils.when(() -> ApplicationContextAwareUtils.getProperties(anyString())).thenReturn("mock-value"); + mockedApplicationContextAwareUtils.when(() -> ApplicationContextAwareUtils.getProperties(anyString())) + .thenReturn("mock-value"); MetadataContextHolder.set(new MetadataContext()); headers = new HttpHeaders(); diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtilsTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/RouterUtilsTest.java similarity index 91% rename from spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtilsTest.java rename to spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/RouterUtilsTest.java index 130eec813..c9d417127 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerUtilsTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/RouterUtilsTest.java @@ -13,10 +13,9 @@ * 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.polaris.loadbalancer; +package com.tencent.cloud.polaris.router; import java.util.ArrayList; import java.util.List; @@ -43,12 +42,12 @@ import org.springframework.cloud.client.ServiceInstance; import static org.mockito.ArgumentMatchers.anyString; /** - * Test for ${@link LoadBalancerUtils}. + * Test for ${@link RouterUtils}. * * @author lepdou 2022-07-04 */ @RunWith(MockitoJUnitRunner.class) -public class LoadBalancerUtilsTest { +public class RouterUtilsTest { private static final String testNamespaceAndService = "testNamespaceAndService"; private static MockedStatic<ApplicationContextAwareUtils> mockedApplicationContextAwareUtils; @@ -73,7 +72,7 @@ public class LoadBalancerUtilsTest { @Test public void testTransferEmptyInstances() { - ServiceInstances serviceInstances = LoadBalancerUtils.transferServersToServiceInstances(Flux.empty()); + ServiceInstances serviceInstances = RouterUtils.transferServersToServiceInstances(Flux.empty()); Assert.assertNotNull(serviceInstances.getInstances()); Assert.assertEquals(0, serviceInstances.getInstances().size()); } @@ -94,7 +93,7 @@ public class LoadBalancerUtilsTest { instances.add(new PolarisServiceInstance(instance)); } - ServiceInstances serviceInstances = LoadBalancerUtils.transferServersToServiceInstances(Flux.just(instances)); + ServiceInstances serviceInstances = RouterUtils.transferServersToServiceInstances(Flux.just(instances)); Assert.assertNotNull(serviceInstances.getInstances()); Assert.assertEquals(instanceSize, serviceInstances.getInstances().size()); diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/LoadBalancerConfigurationTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/LoadBalancerConfigurationTest.java index f195294ee..74c9192d6 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/LoadBalancerConfigurationTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/LoadBalancerConfigurationTest.java @@ -20,7 +20,6 @@ package com.tencent.cloud.polaris.router.config; import com.tencent.cloud.polaris.context.config.PolarisContextAutoConfiguration; -import com.tencent.cloud.polaris.loadbalancer.config.PolarisLoadBalancerAutoConfiguration; import com.tencent.cloud.polaris.router.PolarisRouterServiceInstanceListSupplier; import com.tencent.polaris.router.api.core.RouterAPI; import org.junit.Test; @@ -47,7 +46,6 @@ public class LoadBalancerConfigurationTest { @Test public void testLoadBalancerConfiguration() { contextRunner.withConfiguration(AutoConfigurations.of( - PolarisLoadBalancerAutoConfiguration.class, PolarisContextAutoConfiguration.class, LoadBalancerConfiguration.class)) .run(context -> { @@ -59,7 +57,6 @@ public class LoadBalancerConfigurationTest { public void testPolarisReactiveSupportConfiguration() { contextRunner.withConfiguration(AutoConfigurations.of( LoadBalancerConfiguration.PolarisReactiveSupportConfiguration.class, - PolarisLoadBalancerAutoConfiguration.class, PolarisContextAutoConfiguration.class)) .withBean(SimpleReactiveDiscoveryProperties.class) .withBean(SimpleReactiveDiscoveryClient.class) @@ -74,10 +71,9 @@ public class LoadBalancerConfigurationTest { @Test public void testPolarisBlockingSupportConfiguration() { contextRunner.withConfiguration(AutoConfigurations.of( - PolarisLoadBalancerAutoConfiguration.class, PolarisContextAutoConfiguration.class, LoadBalancerConfiguration.PolarisBlockingSupportConfiguration.class - )) + )) .withBean(SimpleDiscoveryProperties.class) .withBean(SimpleDiscoveryClient.class) .run(context -> { diff --git a/spring-cloud-tencent-coverage/pom.xml b/spring-cloud-tencent-coverage/pom.xml index d5704deea..9f8a67c7f 100644 --- a/spring-cloud-tencent-coverage/pom.xml +++ b/spring-cloud-tencent-coverage/pom.xml @@ -34,11 +34,6 @@ <artifactId>spring-cloud-tencent-rpc-enhancement</artifactId> </dependency> - <dependency> - <groupId>com.tencent.cloud</groupId> - <artifactId>spring-cloud-tencent-polaris-loadbalancer</artifactId> - </dependency> - <dependency> <groupId>com.tencent.cloud</groupId> <artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId> diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml index 35a424de6..c7b234d28 100644 --- a/spring-cloud-tencent-dependencies/pom.xml +++ b/spring-cloud-tencent-dependencies/pom.xml @@ -117,12 +117,6 @@ <version>${revision}</version> </dependency> - <dependency> - <groupId>com.tencent.cloud</groupId> - <artifactId>spring-cloud-tencent-polaris-loadbalancer</artifactId> - <version>${revision}</version> - </dependency> - <dependency> <groupId>com.tencent.cloud</groupId> <artifactId>spring-cloud-starter-tencent-metadata-transfer</artifactId> diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/pom.xml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/pom.xml index 36fb6275d..6811c6230 100644 --- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/pom.xml +++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/pom.xml @@ -48,11 +48,6 @@ <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> - - <dependency> - <groupId>org.owasp.esapi</groupId> - <artifactId>esapi</artifactId> - </dependency> </dependencies> <build> diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceAController.java b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceAController.java index 04570498c..79ba2c0ef 100644 --- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceAController.java +++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceAController.java @@ -17,8 +17,6 @@ package com.tencent.cloud.polaris.circuitbreaker.example; -import org.owasp.esapi.ESAPI; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -64,12 +62,6 @@ public class ServiceAController { ResponseEntity<String> entity = restTemplate.getForEntity( "http://polaris-circuitbreaker-example-b/example/service/b/info", String.class); - String response = entity.getBody(); - return cleanXSS(response); - } - - private String cleanXSS(String str) { - str = ESAPI.encoder().encodeForHTML(str); - return str; + return entity.getBody(); } } diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/ESAPI.properties b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/ESAPI.properties deleted file mode 100644 index 32df629d9..000000000 --- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/ESAPI.properties +++ /dev/null @@ -1,14 +0,0 @@ -ESAPI.printProperties=true -ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder -ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory - -Encoder.AllowMultipleEncoding=false -Encoder.AllowMixedEncoding=false -Encoder.DefaultCodecList=HTMLEntityCodec,PercentCodec,JavaScriptCodec - -Logger.LogEncodingRequired=false -Logger.UserInfo=false -Logger.ClientInfo=false -Logger.ApplicationName=ExampleApplication -Logger.LogApplicationName=false -Logger.LogServerIP=false diff --git a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/pom.xml b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/pom.xml index a61de58f6..272490945 100644 --- a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/pom.xml +++ b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/pom.xml @@ -41,11 +41,6 @@ <!-- <groupId>org.springframework.cloud</groupId>--> <!-- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>--> <!-- </dependency>--> - - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-loadbalancer</artifactId> - </dependency> </dependencies> <build> diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/pom.xml b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/pom.xml index 17c543546..cc37a455b 100644 --- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/pom.xml +++ b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/pom.xml @@ -28,10 +28,5 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> - - <dependency> - <groupId>org.owasp.esapi</groupId> - <artifactId>esapi</artifactId> - </dependency> </dependencies> </project> diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/java/com/tencent/cloud/polaris/gateway/example/callee/GatewayCalleeController.java b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/java/com/tencent/cloud/polaris/gateway/example/callee/GatewayCalleeController.java index f0718b2ac..7736ed640 100644 --- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/java/com/tencent/cloud/polaris/gateway/example/callee/GatewayCalleeController.java +++ b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/java/com/tencent/cloud/polaris/gateway/example/callee/GatewayCalleeController.java @@ -21,7 +21,6 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import com.tencent.cloud.common.constant.MetadataConstant; -import org.owasp.esapi.ESAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,11 +67,6 @@ public class GatewayCalleeController { throws UnsupportedEncodingException { LOG.info(URLDecoder.decode(metadataStr, UTF_8)); metadataStr = URLDecoder.decode(metadataStr, UTF_8); - return cleanXSS(metadataStr); - } - - private String cleanXSS(String str) { - str = ESAPI.encoder().encodeForHTML(str); - return str; + return metadataStr; } } diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/resources/ESAPI.properties b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/resources/ESAPI.properties deleted file mode 100644 index 32df629d9..000000000 --- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service/src/main/resources/ESAPI.properties +++ /dev/null @@ -1,14 +0,0 @@ -ESAPI.printProperties=true -ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder -ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory - -Encoder.AllowMultipleEncoding=false -Encoder.AllowMixedEncoding=false -Encoder.DefaultCodecList=HTMLEntityCodec,PercentCodec,JavaScriptCodec - -Logger.LogEncodingRequired=false -Logger.UserInfo=false -Logger.ClientInfo=false -Logger.ApplicationName=ExampleApplication -Logger.LogApplicationName=false -Logger.LogServerIP=false diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/pom.xml b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/pom.xml index c24f5e6cf..1f0a2d1b9 100644 --- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/pom.xml +++ b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/pom.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>polaris-gateway-example</artifactId> @@ -23,16 +23,10 @@ <groupId>com.tencent.cloud</groupId> <artifactId>spring-cloud-starter-tencent-metadata-transfer</artifactId> </dependency> - + <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> - - <dependency> - <groupId>org.owasp.esapi</groupId> - <artifactId>esapi</artifactId> - </dependency> </dependencies> - </project> diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/java/com/tencent/cloud/polaris/gateway/example/callee/GatewayCalleeController.java b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/java/com/tencent/cloud/polaris/gateway/example/callee/GatewayCalleeController.java index f0718b2ac..7736ed640 100644 --- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/java/com/tencent/cloud/polaris/gateway/example/callee/GatewayCalleeController.java +++ b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/java/com/tencent/cloud/polaris/gateway/example/callee/GatewayCalleeController.java @@ -21,7 +21,6 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import com.tencent.cloud.common.constant.MetadataConstant; -import org.owasp.esapi.ESAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,11 +67,6 @@ public class GatewayCalleeController { throws UnsupportedEncodingException { LOG.info(URLDecoder.decode(metadataStr, UTF_8)); metadataStr = URLDecoder.decode(metadataStr, UTF_8); - return cleanXSS(metadataStr); - } - - private String cleanXSS(String str) { - str = ESAPI.encoder().encodeForHTML(str); - return str; + return metadataStr; } } diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/resources/ESAPI.properties b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/resources/ESAPI.properties deleted file mode 100644 index 32df629d9..000000000 --- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-callee-service2/src/main/resources/ESAPI.properties +++ /dev/null @@ -1,14 +0,0 @@ -ESAPI.printProperties=true -ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder -ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory - -Encoder.AllowMultipleEncoding=false -Encoder.AllowMixedEncoding=false -Encoder.DefaultCodecList=HTMLEntityCodec,PercentCodec,JavaScriptCodec - -Logger.LogEncodingRequired=false -Logger.UserInfo=false -Logger.ClientInfo=false -Logger.ApplicationName=ExampleApplication -Logger.LogApplicationName=false -Logger.LogServerIP=false diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/pom.xml b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/pom.xml index 69bf28210..1d9887427 100644 --- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/pom.xml +++ b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/pom.xml @@ -48,10 +48,5 @@ <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> - - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-loadbalancer</artifactId> - </dependency> </dependencies> </project> diff --git a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/pom.xml b/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/pom.xml index 714907028..ee07d5401 100644 --- a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/pom.xml +++ b/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/pom.xml @@ -27,11 +27,6 @@ <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> - - <dependency> - <groupId>org.owasp.esapi</groupId> - <artifactId>esapi</artifactId> - </dependency> </dependencies> <build> diff --git a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/src/main/java/com/tencent/cloud/polaris/router/example/RouterCalleeController.java b/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/src/main/java/com/tencent/cloud/polaris/router/example/RouterCalleeController.java index 6693cf08e..ead2c1fe1 100644 --- a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/src/main/java/com/tencent/cloud/polaris/router/example/RouterCalleeController.java +++ b/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/src/main/java/com/tencent/cloud/polaris/router/example/RouterCalleeController.java @@ -18,7 +18,6 @@ package com.tencent.cloud.polaris.router.example; -import org.owasp.esapi.ESAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,14 +48,6 @@ public class RouterCalleeController { @PostMapping("/info") public String info(String name, @RequestBody User user) { LOG.info("Discovery Service Callee [{}] is called.", port); - return String.format("Discovery Service Callee [%s] is called. user = %s", port, cleanXSS(user)); - } - - private User cleanXSS(User user) { - User u = new User(); - String name = ESAPI.encoder().encodeForHTML(user.getName()); - u.setName(name); - u.setAge(user.getAge()); - return u; + return String.format("Discovery Service Callee [%s] is called. user = %s", port, user); } } diff --git a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/src/main/resources/ESAPI.properties b/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/src/main/resources/ESAPI.properties deleted file mode 100644 index 32df629d9..000000000 --- a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service1/src/main/resources/ESAPI.properties +++ /dev/null @@ -1,14 +0,0 @@ -ESAPI.printProperties=true -ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder -ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory - -Encoder.AllowMultipleEncoding=false -Encoder.AllowMixedEncoding=false -Encoder.DefaultCodecList=HTMLEntityCodec,PercentCodec,JavaScriptCodec - -Logger.LogEncodingRequired=false -Logger.UserInfo=false -Logger.ClientInfo=false -Logger.ApplicationName=ExampleApplication -Logger.LogApplicationName=false -Logger.LogServerIP=false diff --git a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/pom.xml b/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/pom.xml index 9862d92bb..8ee075153 100644 --- a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/pom.xml +++ b/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/pom.xml @@ -27,11 +27,6 @@ <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> - - <dependency> - <groupId>org.owasp.esapi</groupId> - <artifactId>esapi</artifactId> - </dependency> </dependencies> <build> diff --git a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/src/main/java/com/tencent/cloud/polaris/router/example/RouterCalleeController.java b/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/src/main/java/com/tencent/cloud/polaris/router/example/RouterCalleeController.java index 6346cd606..075887766 100644 --- a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/src/main/java/com/tencent/cloud/polaris/router/example/RouterCalleeController.java +++ b/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/src/main/java/com/tencent/cloud/polaris/router/example/RouterCalleeController.java @@ -18,7 +18,6 @@ package com.tencent.cloud.polaris.router.example; -import org.owasp.esapi.ESAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,14 +49,6 @@ public class RouterCalleeController { @PostMapping("/info") public String info(@RequestParam("name") String name, @RequestBody User user) { LOG.info("Discovery Service Callee [{}] is called.", port); - return String.format("Discovery Service Callee [%s] is called. user = %s", port, cleanXSS(user)); - } - - private User cleanXSS(User user) { - User u = new User(); - String name = ESAPI.encoder().encodeForHTML(user.getName()); - u.setName(name); - u.setAge(user.getAge()); - return u; + return String.format("Discovery Service Callee [%s] is called. user = %s", port, user); } } diff --git a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/src/main/resources/ESAPI.properties b/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/src/main/resources/ESAPI.properties deleted file mode 100644 index 32df629d9..000000000 --- a/spring-cloud-tencent-examples/polaris-router-example/router-callee-service2/src/main/resources/ESAPI.properties +++ /dev/null @@ -1,14 +0,0 @@ -ESAPI.printProperties=true -ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder -ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory - -Encoder.AllowMultipleEncoding=false -Encoder.AllowMixedEncoding=false -Encoder.DefaultCodecList=HTMLEntityCodec,PercentCodec,JavaScriptCodec - -Logger.LogEncodingRequired=false -Logger.UserInfo=false -Logger.ClientInfo=false -Logger.ApplicationName=ExampleApplication -Logger.LogApplicationName=false -Logger.LogServerIP=false diff --git a/spring-cloud-tencent-examples/pom.xml b/spring-cloud-tencent-examples/pom.xml index 118fbaffa..2a4eb0aec 100644 --- a/spring-cloud-tencent-examples/pom.xml +++ b/spring-cloud-tencent-examples/pom.xml @@ -32,15 +32,4 @@ <properties> <maven.deploy.skip>true</maven.deploy.skip> </properties> - - <dependencyManagement> - <dependencies> - <dependency> - <groupId>org.owasp.esapi</groupId> - <artifactId>esapi</artifactId> - <version>2.5.0.0</version> - </dependency> - </dependencies> - </dependencyManagement> - </project> diff --git a/spring-cloud-tencent-polaris-context/pom.xml b/spring-cloud-tencent-polaris-context/pom.xml index e59c2a278..1c85382cd 100644 --- a/spring-cloud-tencent-polaris-context/pom.xml +++ b/spring-cloud-tencent-polaris-context/pom.xml @@ -89,6 +89,11 @@ <artifactId>flow-cache-expired</artifactId> </dependency> + <dependency> + <groupId>com.tencent.polaris</groupId> + <artifactId>polaris-router-factory</artifactId> + </dependency> + <dependency> <groupId>com.tencent.polaris</groupId> <artifactId>loadbalancer-random</artifactId> diff --git a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextAutoConfiguration.java b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextAutoConfiguration.java index 36fa93718..6db635efe 100644 --- a/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextAutoConfiguration.java +++ b/spring-cloud-tencent-polaris-context/src/main/java/com/tencent/cloud/polaris/context/config/PolarisContextAutoConfiguration.java @@ -29,6 +29,8 @@ import com.tencent.polaris.api.core.ProviderAPI; import com.tencent.polaris.api.exception.PolarisException; import com.tencent.polaris.client.api.SDKContext; import com.tencent.polaris.factory.api.DiscoveryAPIFactory; +import com.tencent.polaris.factory.api.RouterAPIFactory; +import com.tencent.polaris.router.api.core.RouterAPI; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -66,6 +68,11 @@ public class PolarisContextAutoConfiguration { return DiscoveryAPIFactory.createConsumerAPIByContext(polarisContext); } + @Bean + public RouterAPI polarisRouter(SDKContext polarisContext) throws PolarisException { + return RouterAPIFactory.createRouterAPIByContext(polarisContext); + } + @Bean @ConditionalOnMissingBean public ModifyAddress polarisConfigModifier(PolarisContextProperties properties) { diff --git a/spring-cloud-tencent-polaris-loadbalancer/pom.xml b/spring-cloud-tencent-polaris-loadbalancer/pom.xml deleted file mode 100644 index da560c430..000000000 --- a/spring-cloud-tencent-polaris-loadbalancer/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="http://maven.apache.org/POM/4.0.0" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <parent> - <artifactId>spring-cloud-tencent</artifactId> - <groupId>com.tencent.cloud</groupId> - <version>${revision}</version> - <relativePath>../pom.xml</relativePath> - </parent> - <modelVersion>4.0.0</modelVersion> - - <artifactId>spring-cloud-tencent-polaris-loadbalancer</artifactId> - <name>Spring Cloud Tencent Polaris LoadBalancer</name> - - <dependencies> - <!-- Spring Cloud Tencent dependencies start --> - <dependency> - <groupId>com.tencent.cloud</groupId> - <artifactId>spring-cloud-tencent-polaris-context</artifactId> - </dependency> - <!-- Spring Cloud Tencent dependencies end --> - - <!-- Polaris dependencies start --> - <dependency> - <groupId>com.tencent.polaris</groupId> - <artifactId>polaris-router-factory</artifactId> - </dependency> - - <dependency> - <groupId>com.tencent.polaris</groupId> - <artifactId>polaris-discovery-api</artifactId> - </dependency> - - <dependency> - <groupId>com.tencent.polaris</groupId> - <artifactId>polaris-test-common</artifactId> - <scope>test</scope> - </dependency> - <!-- Polaris dependencies end --> - - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-loadbalancer</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.mockito</groupId> - <artifactId>mockito-inline</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.mockito</groupId> - <artifactId>mockito-core</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>net.bytebuddy</groupId> - <artifactId>byte-buddy</artifactId> - <scope>test</scope> - </dependency> - </dependencies> - -</project> diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java deleted file mode 100644 index 04227b4d9..000000000 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Spring Cloud Tencent available. - * - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software distributed - * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - * CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - */ - -package com.tencent.cloud.polaris.loadbalancer; - -import java.util.ArrayList; -import java.util.List; - -import com.tencent.cloud.common.metadata.MetadataContext; -import com.tencent.cloud.common.pojo.PolarisServiceInstance; -import com.tencent.polaris.api.pojo.DefaultInstance; -import org.apache.commons.lang.StringUtils; -import reactor.core.publisher.Flux; - -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.client.loadbalancer.Request; -import org.springframework.cloud.loadbalancer.core.DelegatingServiceInstanceListSupplier; -import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; -import org.springframework.util.CollectionUtils; - -/** - * Service instance list supplier of Polaris. - * - * @author Haotian Zhang - */ -public class PolarisServiceInstanceListSupplier extends DelegatingServiceInstanceListSupplier { - - public PolarisServiceInstanceListSupplier(ServiceInstanceListSupplier delegate) { - super(delegate); - } - - @Override - public Flux<List<ServiceInstance>> get() { - return getDelegate().get().map(this::chooseInstances); - } - - @Override - public Flux<List<ServiceInstance>> get(Request request) { - return super.get(request); - } - - public List<ServiceInstance> chooseInstances(List<ServiceInstance> allServers) { - if (CollectionUtils.isEmpty(allServers)) { - return allServers; - } - - String serviceName = allServers.get(0).getServiceId(); - if (StringUtils.isBlank(serviceName)) { - throw new IllegalStateException( - "PolarisRoutingLoadBalancer only Server with AppName or ServiceIdForDiscovery attribute"); - } - List<ServiceInstance> serviceInstances = new ArrayList<>(allServers.size()); - for (ServiceInstance server : allServers) { - DefaultInstance instance = new DefaultInstance(); - instance.setNamespace(MetadataContext.LOCAL_NAMESPACE); - instance.setService(serviceName); - instance.setProtocol(server.getScheme()); - instance.setId(server.getInstanceId()); - instance.setHost(server.getHost()); - instance.setPort(server.getPort()); - instance.setWeight(100); - instance.setMetadata(server.getMetadata()); - serviceInstances.add(new PolarisServiceInstance(instance)); - } - return serviceInstances; - } -} diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java deleted file mode 100644 index 3ebadf721..000000000 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Spring Cloud Tencent available. - * - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software distributed - * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - * CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - */ - -package com.tencent.cloud.polaris.loadbalancer.config; - -import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled; -import com.tencent.cloud.polaris.loadbalancer.PolarisLoadBalancer; -import com.tencent.cloud.polaris.loadbalancer.PolarisServiceInstanceListSupplier; -import com.tencent.polaris.router.api.core.RouterAPI; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.client.ConditionalOnBlockingDiscoveryEnabled; -import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled; -import org.springframework.cloud.client.ConditionalOnReactiveDiscoveryEnabled; -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.client.discovery.DiscoveryClient; -import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient; -import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; -import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; -import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.annotation.Order; -import org.springframework.core.env.Environment; - -/** - * Configuration of loadbalancer client. - * - * @author <a href="mailto:liaochuntao@live.com">liaochuntao</a> - */ -@Configuration(proxyBeanMethods = false) -@ConditionalOnPolarisEnabled -@ConditionalOnDiscoveryEnabled -public class PolarisLoadBalancerClientConfiguration { - - /** - * Order of reactive discovery service instance supplier. - */ - private static final int REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER = 193827465; - - private final static String STRATEGY_WEIGHT = "polarisWeighted"; - - @Bean - @ConditionalOnMissingBean - @ConditionalOnProperty(value = "spring.cloud.polaris.loadbalancer.strategy", havingValue = STRATEGY_WEIGHT) - public ReactorLoadBalancer<ServiceInstance> polarisLoadBalancer(Environment environment, - LoadBalancerClientFactory loadBalancerClientFactory, PolarisLoadBalancerProperties loadBalancerProperties, - RouterAPI routerAPI) { - String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); - return new PolarisLoadBalancer(name, - loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), - loadBalancerProperties, routerAPI); - } - - @Configuration(proxyBeanMethods = false) - @ConditionalOnReactiveDiscoveryEnabled - @Order(REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER) - protected static class PolarisReactiveSupportConfiguration { - - @Bean - @ConditionalOnMissingBean - @ConditionalOnBean(ReactiveDiscoveryClient.class) - @ConditionalOnProperty(value = "spring.cloud.loadbalancer.configurations", havingValue = "polaris") - public ServiceInstanceListSupplier polarisRouterDiscoveryClientServiceInstanceListSupplier( - ConfigurableApplicationContext context) { - return new PolarisServiceInstanceListSupplier( - ServiceInstanceListSupplier.builder().withDiscoveryClient().build(context)); - } - - } - - @Configuration(proxyBeanMethods = false) - @ConditionalOnBlockingDiscoveryEnabled - @Order(REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER + 1) - protected static class PolarisBlockingSupportConfiguration { - - @Bean - @ConditionalOnMissingBean - @ConditionalOnBean(DiscoveryClient.class) - @ConditionalOnProperty(value = "spring.cloud.loadbalancer.configurations", havingValue = "polaris") - public ServiceInstanceListSupplier polarisRouterDiscoveryClientServiceInstanceListSupplier( - ConfigurableApplicationContext context) { - return new PolarisServiceInstanceListSupplier( - ServiceInstanceListSupplier.builder().withBlockingDiscoveryClient().build(context)); - } - } -} diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerProperties.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerProperties.java deleted file mode 100644 index be592ac1d..000000000 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerProperties.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Spring Cloud Tencent available. - * - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software distributed - * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - * CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - */ - -package com.tencent.cloud.polaris.loadbalancer.config; - -import com.tencent.cloud.common.constant.ContextConstant; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * Properties of Polaris loadbalancer. - * - * @author Haotian Zhang - */ -@ConfigurationProperties("spring.cloud.polaris.loadbalancer") -public class PolarisLoadBalancerProperties { - - /** - * If load-balance enabled. - */ - private Boolean enabled = true; - - /** - * Load balance strategy. - */ - private String strategy; - - /** - * Type of discovery server. - */ - private String discoveryType = ContextConstant.POLARIS; - - public String getStrategy() { - return strategy; - } - - public void setStrategy(String strategy) { - this.strategy = strategy; - } - - public Boolean getEnabled() { - return enabled; - } - - public void setEnabled(Boolean enabled) { - this.enabled = enabled; - } - - public String getDiscoveryType() { - return discoveryType; - } - - public void setDiscoveryType(String discoveryType) { - this.discoveryType = discoveryType; - } - - @Override - public String toString() { - return "PolarisLoadBalancerProperties{" + "loadbalancerEnabled=" + enabled + ", strategy='" + strategy + '\'' - + '}'; - } -} diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/additional-spring-configuration-metadata.json deleted file mode 100644 index 5ecb156bc..000000000 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "properties": [ - { - "name": "spring.cloud.polaris.loadbalancer.enabled", - "type": "java.lang.Boolean", - "defaultValue": "true", - "description": "polaris loadbalancer." - }, - { - "name": "spring.cloud.polaris.loadbalancer.discoveryType", - "type": "java.lang.String", - "defaultValue": "POLARIS", - "description": "Type of discovery server." - }, - { - "name": "spring.cloud.polaris.loadbalancer.strategy", - "type": "java.lang.String", - "defaultValue": "random", - "description": "retry,best_available,availability_filtering,round_robin,weighted_response_time,zone_avoidance,random,consistent_hash,weighted_random." - } - ] -} diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/spring.factories b/spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/spring.factories deleted file mode 100644 index a13924bac..000000000 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.tencent.cloud.polaris.loadbalancer.config.PolarisLoadBalancerAutoConfiguration diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplierTest.java b/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplierTest.java deleted file mode 100644 index 22062b0cf..000000000 --- a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplierTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making Spring Cloud Tencent available. - * - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the BSD 3-Clause License (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://opensource.org/licenses/BSD-3-Clause - * - * Unless required by applicable law or agreed to in writing, software distributed - * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - * CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - * - */ - -package com.tencent.cloud.polaris.loadbalancer; - -import java.util.ArrayList; -import java.util.List; - -import com.tencent.cloud.common.pojo.PolarisServiceInstance; -import com.tencent.cloud.common.util.ApplicationContextAwareUtils; -import org.assertj.core.api.Assertions; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; - -import org.springframework.cloud.client.DefaultServiceInstance; -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; - -import static com.tencent.cloud.common.metadata.MetadataContext.LOCAL_NAMESPACE; -import static org.mockito.ArgumentMatchers.anyString; - -/** - * Test for {@link PolarisServiceInstanceListSupplier}. - * - * @author rod.xu - */ -@RunWith(MockitoJUnitRunner.class) -public class PolarisServiceInstanceListSupplierTest { - - @Mock - private ServiceInstanceListSupplier serviceInstanceListSupplier; - - @Test - public void chooseInstancesTest() { - try (MockedStatic<ApplicationContextAwareUtils> mockedApplicationContextAwareUtils = Mockito - .mockStatic(ApplicationContextAwareUtils.class)) { - mockedApplicationContextAwareUtils.when(() -> ApplicationContextAwareUtils.getProperties(anyString())) - .thenReturn("test-unit"); - - PolarisServiceInstanceListSupplier instanceListSupplier = - new PolarisServiceInstanceListSupplier(serviceInstanceListSupplier); - - List<ServiceInstance> allServers = new ArrayList<>(); - ServiceInstance instance1 = new DefaultServiceInstance("unit-test-instanceId-01", - "unit-test-serviceId", "unit-test-host-01", 8090, false); - ServiceInstance instance2 = new DefaultServiceInstance("unit-test-instanceId-02", - "unit-test-serviceId", "unit-test-host-02", 8090, false); - - allServers.add(instance1); - allServers.add(instance2); - - List<ServiceInstance> polarisInstanceList = instanceListSupplier.chooseInstances(allServers); - - Assertions.assertThat(polarisInstanceList).isNotNull(); - Assertions.assertThat(polarisInstanceList.size()).isEqualTo(allServers.size()); - - for (ServiceInstance serviceInstance : polarisInstanceList) { - Assertions.assertThat(serviceInstance instanceof PolarisServiceInstance).isTrue(); - - PolarisServiceInstance polarisServiceInstance = (PolarisServiceInstance) serviceInstance; - - Assertions.assertThat(polarisServiceInstance.isSecure()).isFalse(); - Assertions.assertThat(polarisServiceInstance.getPolarisInstance().getService()) - .isEqualTo("unit-test-serviceId"); - Assertions.assertThat(polarisServiceInstance.getPolarisInstance().getNamespace()) - .isEqualTo(LOCAL_NAMESPACE); - Assertions.assertThat(polarisServiceInstance.getPolarisInstance().getPort()).isEqualTo(8090); - Assertions.assertThat(polarisServiceInstance.getPolarisInstance().getId() - .startsWith("unit-test-instanceId")).isTrue(); - Assertions.assertThat(polarisServiceInstance.getPolarisInstance().getHost() - .startsWith("unit-test-host")).isTrue(); - } - } - } -} diff --git a/spring-cloud-tencent-rpc-enhancement/pom.xml b/spring-cloud-tencent-rpc-enhancement/pom.xml index 2d5ff710b..16aab2780 100644 --- a/spring-cloud-tencent-rpc-enhancement/pom.xml +++ b/spring-cloud-tencent-rpc-enhancement/pom.xml @@ -17,7 +17,7 @@ <!-- Spring Cloud Tencent dependencies start --> <dependency> <groupId>com.tencent.cloud</groupId> - <artifactId>spring-cloud-tencent-polaris-loadbalancer</artifactId> + <artifactId>spring-cloud-tencent-polaris-context</artifactId> </dependency> <!-- Spring Cloud Tencent dependencies end --> @@ -33,6 +33,11 @@ <artifactId>spring-boot-starter-aop</artifactId> </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-loadbalancer</artifactId> + </dependency> + <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId>