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>