From cc4f81507a1ada9bc2635ac7a9bfa8e63c153961 Mon Sep 17 00:00:00 2001
From: SkyeBeFreeman <928016560@qq.com>
Date: Sun, 24 Apr 2022 18:22:31 +0800
Subject: [PATCH 1/6] feat:refactor loadbalancer module as a basic module for
router and circuit breaker.
---
pom.xml | 3 +-
.../pom.xml | 8 +-
.../discovery/PolarisDiscoveryHandler.java | 15 ++++
.../discovery/PolarisServiceDiscovery.java | 2 +-
.../pom.xml | 69 +---------------
.../cloud/polaris/router/package-info.java | 23 ++++++
.../main/resources/META-INF/spring.factories | 2 -
.../common/constant/ContextConstant.java | 8 ++
spring-cloud-tencent-dependencies/pom.xml | 10 ++-
.../polaris-circuitbreaker-example-a/pom.xml | 5 ++
.../src/main/resources/bootstrap.yml | 2 +
spring-cloud-tencent-polaris-context/pom.xml | 78 +++++++++----------
.../pom.xml | 54 +++++++++++++
.../loadbalancer/PolarisLoadbalancer.java | 13 ++--
.../PolarisServiceInstanceListSupplier.java | 6 +-
.../PolarisLoadBalancerAutoConfiguration.java | 2 +-
...olarisLoadBalancerClientConfiguration.java | 12 +--
.../config/PolarisLoadBalancerProperties.java | 40 ++++++----
...itional-spring-configuration-metadata.json | 0
.../main/resources/META-INF/spring.factories | 2 +
...arisLoadBalancerAutoConfigurationTest.java | 2 +-
.../PolarisRouterAutoConfigurationTest.java | 8 +-
22 files changed, 210 insertions(+), 154 deletions(-)
create mode 100644 spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/package-info.java
delete mode 100644 spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories
create mode 100644 spring-cloud-tencent-polaris-loadbalancer/pom.xml
rename spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRoutingLoadbalancer.java => spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadbalancer.java (90%)
rename spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java => spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java (94%)
rename {spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router => spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer}/config/PolarisLoadBalancerAutoConfiguration.java (97%)
rename {spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router => spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer}/config/PolarisLoadBalancerClientConfiguration.java (92%)
rename {spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router => spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer}/config/PolarisLoadBalancerProperties.java (59%)
rename {spring-cloud-starter-tencent-polaris-router => spring-cloud-tencent-polaris-loadbalancer}/src/main/resources/META-INF/additional-spring-configuration-metadata.json (100%)
create mode 100644 spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/spring.factories
rename {spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router => spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer}/config/PolarisLoadBalancerAutoConfigurationTest.java (97%)
rename {spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router => spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer}/config/PolarisRouterAutoConfigurationTest.java (91%)
diff --git a/pom.xml b/pom.xml
index c6e8bd4c..c4dc0827 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,7 @@
spring-cloud-tencent-examples
spring-cloud-tencent-coverage
spring-cloud-starter-tencent-polaris-config
+ spring-cloud-tencent-polaris-loadbalancer
@@ -77,7 +78,7 @@
- 1.3.0-2020.0.5
+ 1.4.1-2020.0.5-SNAPSHOT
2020.0.5
diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml b/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml
index 354285e5..06286c65 100644
--- a/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml
+++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml
@@ -16,7 +16,7 @@
com.tencent.cloud
- spring-cloud-tencent-polaris-context
+ spring-cloud-tencent-polaris-loadbalancer
@@ -84,12 +84,6 @@
-
- org.springframework.cloud
- spring-cloud-loadbalancer
- true
-
-
org.springframework.cloud
spring-cloud-starter-openfeign
diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java
index b2196cb6..0ea9bb97 100644
--- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java
+++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java
@@ -28,6 +28,7 @@ import com.tencent.polaris.api.core.ConsumerAPI;
import com.tencent.polaris.api.core.ProviderAPI;
import com.tencent.polaris.api.pojo.ServiceInfo;
import com.tencent.polaris.api.rpc.GetAllInstancesRequest;
+import com.tencent.polaris.api.rpc.GetHealthyInstancesRequest;
import com.tencent.polaris.api.rpc.GetInstancesRequest;
import com.tencent.polaris.api.rpc.GetServicesRequest;
import com.tencent.polaris.api.rpc.InstancesResponse;
@@ -59,6 +60,7 @@ public class PolarisDiscoveryHandler {
* @param service service name
* @return list of instances
*/
+ @Deprecated
public InstancesResponse getFilteredInstances(String service) {
String namespace = polarisDiscoveryProperties.getNamespace();
GetInstancesRequest getInstancesRequest = new GetInstancesRequest();
@@ -80,6 +82,19 @@ public class PolarisDiscoveryHandler {
return polarisConsumer.getInstances(getInstancesRequest);
}
+ /**
+ * Get a list of healthy instances.
+ * @param service service name
+ * @return list of healthy instances
+ */
+ public InstancesResponse getHealthyInstances(String service) {
+ String namespace = polarisDiscoveryProperties.getNamespace();
+ GetHealthyInstancesRequest getHealthyInstancesRequest = new GetHealthyInstancesRequest();
+ getHealthyInstancesRequest.setNamespace(namespace);
+ getHealthyInstancesRequest.setService(service);
+ return polarisConsumer.getHealthyInstancesInstance(getHealthyInstancesRequest);
+ }
+
/**
* Return all instances for the given service.
* @param service serviceName
diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisServiceDiscovery.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisServiceDiscovery.java
index ccaf2f37..044af863 100644
--- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisServiceDiscovery.java
+++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisServiceDiscovery.java
@@ -49,7 +49,7 @@ public class PolarisServiceDiscovery {
*/
public List getInstances(String serviceId) throws PolarisException {
List instances = new ArrayList<>();
- InstancesResponse filteredInstances = polarisDiscoveryHandler.getFilteredInstances(serviceId);
+ InstancesResponse filteredInstances = polarisDiscoveryHandler.getHealthyInstances(serviceId);
ServiceInstances serviceInstances = filteredInstances.toServiceInstances();
for (Instance instance : serviceInstances.getInstances()) {
instances.add(new PolarisServiceInstance(instance));
diff --git a/spring-cloud-starter-tencent-polaris-router/pom.xml b/spring-cloud-starter-tencent-polaris-router/pom.xml
index 945bcc11..d623da7b 100644
--- a/spring-cloud-starter-tencent-polaris-router/pom.xml
+++ b/spring-cloud-starter-tencent-polaris-router/pom.xml
@@ -17,79 +17,16 @@
com.tencent.cloud
- spring-cloud-tencent-polaris-context
+ spring-cloud-tencent-polaris-loadbalancer
-
- org.springframework.cloud
- spring-cloud-loadbalancer
-
-
-
- com.tencent.polaris
- polaris-router-factory
-
-
- com.tencent.polaris
- router-rule
-
-
- com.tencent.polaris
- router-nearby
-
-
- com.tencent.polaris
- router-metadata
-
-
- com.tencent.polaris
- router-canary
-
-
- com.tencent.polaris
- router-set
-
-
- com.tencent.polaris
- router-isolated
-
-
- com.tencent.polaris
- router-healthy
-
-
-
-
-
com.tencent.polaris
router-rule
-
-
- com.tencent.polaris
- router-nearby
-
-
-
- com.tencent.polaris
- router-metadata
-
-
-
- com.tencent.polaris
- polaris-test-common
- test
-
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
+
+
diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/package-info.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/package-info.java
new file mode 100644
index 00000000..3eb18e37
--- /dev/null
+++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/package-info.java
@@ -0,0 +1,23 @@
+/*
+ * 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 info of router.
+ *
+ * @author Haotian Zhang
+ */
+package com.tencent.cloud.polaris.router;
diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories b/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories
deleted file mode 100644
index 76319b26..00000000
--- a/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories
+++ /dev/null
@@ -1,2 +0,0 @@
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
- com.tencent.cloud.polaris.router.config.PolarisLoadBalancerAutoConfiguration
diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/ContextConstant.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/ContextConstant.java
index 54f20387..54d8b322 100644
--- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/ContextConstant.java
+++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/constant/ContextConstant.java
@@ -24,6 +24,14 @@ package com.tencent.cloud.common.constant;
*/
public final class ContextConstant {
+ /**
+ * Name of Polaris.
+ */
+ public static final String POLARIS = "POLARIS";
+
+ private ContextConstant() {
+ }
+
/**
* Order of configuration modifier.
*/
diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml
index 114e2962..bbbea557 100644
--- a/spring-cloud-tencent-dependencies/pom.xml
+++ b/spring-cloud-tencent-dependencies/pom.xml
@@ -70,8 +70,8 @@
- 1.3.0-2020.0.5
- 1.4.0
+ 1.4.1-2020.0.5-SNAPSHOT
+ 1.5.1
2.0.0
@@ -102,6 +102,12 @@
${revision}
+
+ com.tencent.cloud
+ spring-cloud-tencent-polaris-loadbalancer
+ ${revision}
+
+
com.tencent.cloud
spring-cloud-starter-tencent-metadata-transfer
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 837fdfba..9833b5f8 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
@@ -33,6 +33,11 @@
org.springframework.cloud
spring-cloud-starter-loadbalancer
+
+
+ org.springframework.cloud
+ spring-cloud-circuitbreaker-spring-retry
+
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/bootstrap.yml
index e693a970..ba762ac5 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/bootstrap.yml
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/bootstrap.yml
@@ -10,6 +10,8 @@ spring:
enabled: true
circuitbreaker:
enabled: true
+ loadbalancer:
+ configurations: polaris
feign:
circuitbreaker:
enabled: true
diff --git a/spring-cloud-tencent-polaris-context/pom.xml b/spring-cloud-tencent-polaris-context/pom.xml
index a63d2026..aa9b8523 100644
--- a/spring-cloud-tencent-polaris-context/pom.xml
+++ b/spring-cloud-tencent-polaris-context/pom.xml
@@ -35,32 +35,32 @@
com.tencent.polaris
polaris-plugin-api
-
+
-
- com.tencent.polaris
- connector-polaris-grpc
-
+
+ com.tencent.polaris
+ connector-polaris-grpc
+
-
- com.tencent.polaris
- connector-consul
-
+
+ com.tencent.polaris
+ connector-consul
+
-
- com.tencent.polaris
- connector-composite
-
+
+ com.tencent.polaris
+ connector-composite
+
-
- com.tencent.polaris
- registry-memory
-
+
+ com.tencent.polaris
+ registry-memory
+
-
- com.tencent.polaris
- flow-cache-expired
-
+
+ com.tencent.polaris
+ flow-cache-expired
+
@@ -72,23 +72,23 @@
com.tencent.polaris
router-healthy
-
-
- com.tencent.polaris
- loadbalancer-random
-
-
-
- com.tencent.polaris
- loadbalancer-ringhash
-
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
+
+
+ com.tencent.polaris
+ loadbalancer-random
+
+
+
+ com.tencent.polaris
+ loadbalancer-ringhash
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
diff --git a/spring-cloud-tencent-polaris-loadbalancer/pom.xml b/spring-cloud-tencent-polaris-loadbalancer/pom.xml
new file mode 100644
index 00000000..cfec39a0
--- /dev/null
+++ b/spring-cloud-tencent-polaris-loadbalancer/pom.xml
@@ -0,0 +1,54 @@
+
+
+
+ spring-cloud-tencent
+ com.tencent.cloud
+ ${revision}
+ ../pom.xml
+
+ 4.0.0
+
+ spring-cloud-tencent-polaris-loadbalancer
+ Spring Cloud Tencent Polaris LoadBalancer
+
+
+
+
+ com.tencent.cloud
+ spring-cloud-tencent-polaris-context
+
+
+
+
+
+ com.tencent.polaris
+ polaris-router-factory
+
+
+
+ com.tencent.polaris
+ polaris-discovery-api
+
+
+
+ com.tencent.polaris
+ polaris-test-common
+ test
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-loadbalancer
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRoutingLoadbalancer.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadbalancer.java
similarity index 90%
rename from spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRoutingLoadbalancer.java
rename to spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadbalancer.java
index 983543d3..e7609835 100644
--- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRoutingLoadbalancer.java
+++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadbalancer.java
@@ -15,14 +15,14 @@
* specific language governing permissions and limitations under the License.
*/
-package com.tencent.cloud.polaris.router;
+package com.tencent.cloud.polaris.loadbalancer;
import java.util.List;
import java.util.stream.Collectors;
import com.tencent.cloud.common.metadata.MetadataContext;
import com.tencent.cloud.common.pojo.PolarisServiceInstance;
-import com.tencent.cloud.polaris.router.config.PolarisLoadBalancerProperties;
+import com.tencent.cloud.polaris.loadbalancer.config.PolarisLoadBalancerProperties;
import com.tencent.polaris.api.pojo.DefaultServiceInstances;
import com.tencent.polaris.api.pojo.Instance;
import com.tencent.polaris.api.pojo.ServiceInstances;
@@ -51,9 +51,9 @@ import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
*
* @author liaochuntao
*/
-public class PolarisRoutingLoadbalancer extends RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalancer {
+public class PolarisLoadbalancer extends RoundRobinLoadBalancer implements ReactorServiceInstanceLoadBalancer {
- private static final Logger log = LoggerFactory.getLogger(PolarisRoutingLoadbalancer.class);
+ private static final Logger log = LoggerFactory.getLogger(PolarisLoadbalancer.class);
private final String serviceId;
@@ -63,8 +63,7 @@ public class PolarisRoutingLoadbalancer extends RoundRobinLoadBalancer implement
private ObjectProvider supplierObjectProvider;
- public PolarisRoutingLoadbalancer(String serviceId,
- ObjectProvider supplierObjectProvider,
+ public PolarisLoadbalancer(String serviceId, ObjectProvider supplierObjectProvider,
PolarisLoadBalancerProperties loadBalancerProperties, RouterAPI routerAPI) {
super(supplierObjectProvider, serviceId);
this.serviceId = serviceId;
@@ -83,7 +82,7 @@ public class PolarisRoutingLoadbalancer extends RoundRobinLoadBalancer implement
@Override
public Mono> choose(Request request) {
- if (!loadBalancerProperties.getLoadbalancerEnabled()) {
+ if (!loadBalancerProperties.getEnabled()) {
return super.choose(request);
}
ServiceInstanceListSupplier supplier = supplierObjectProvider
diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java
similarity index 94%
rename from spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java
rename to spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java
index b9866d5d..20dd8c60 100644
--- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRouterServiceInstanceListSupplier.java
+++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisServiceInstanceListSupplier.java
@@ -15,7 +15,7 @@
* specific language governing permissions and limitations under the License.
*/
-package com.tencent.cloud.polaris.router;
+package com.tencent.cloud.polaris.loadbalancer;
import java.util.ArrayList;
import java.util.List;
@@ -48,11 +48,11 @@ import org.springframework.util.CollectionUtils;
*
* @author Haotian Zhang
*/
-public class PolarisRouterServiceInstanceListSupplier extends DelegatingServiceInstanceListSupplier {
+public class PolarisServiceInstanceListSupplier extends DelegatingServiceInstanceListSupplier {
private final RouterAPI routerAPI;
- public PolarisRouterServiceInstanceListSupplier(ServiceInstanceListSupplier delegate, RouterAPI routerAPI) {
+ public PolarisServiceInstanceListSupplier(ServiceInstanceListSupplier delegate, RouterAPI routerAPI) {
super(delegate);
this.routerAPI = routerAPI;
}
diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerAutoConfiguration.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfiguration.java
similarity index 97%
rename from spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerAutoConfiguration.java
rename to spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfiguration.java
index 47c63b57..70f09fb0 100644
--- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerAutoConfiguration.java
+++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfiguration.java
@@ -15,7 +15,7 @@
* specific language governing permissions and limitations under the License.
*/
-package com.tencent.cloud.polaris.router.config;
+package com.tencent.cloud.polaris.loadbalancer.config;
import com.tencent.cloud.polaris.context.ConditionalOnPolarisEnabled;
import com.tencent.polaris.api.exception.PolarisException;
diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerClientConfiguration.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java
similarity index 92%
rename from spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerClientConfiguration.java
rename to spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java
index 371df645..8e9cc3d8 100644
--- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerClientConfiguration.java
+++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerClientConfiguration.java
@@ -15,10 +15,10 @@
* specific language governing permissions and limitations under the License.
*/
-package com.tencent.cloud.polaris.router.config;
+package com.tencent.cloud.polaris.loadbalancer.config;
-import com.tencent.cloud.polaris.router.PolarisRouterServiceInstanceListSupplier;
-import com.tencent.cloud.polaris.router.PolarisRoutingLoadbalancer;
+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;
@@ -59,7 +59,7 @@ public class PolarisLoadBalancerClientConfiguration {
LoadBalancerClientFactory loadBalancerClientFactory, PolarisLoadBalancerProperties loadBalancerProperties,
RouterAPI routerAPI) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
- return new PolarisRoutingLoadbalancer(name,
+ return new PolarisLoadbalancer(name,
loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),
loadBalancerProperties, routerAPI);
}
@@ -74,7 +74,7 @@ public class PolarisLoadBalancerClientConfiguration {
@ConditionalOnProperty(value = "spring.cloud.loadbalancer.configurations", havingValue = "polaris")
public ServiceInstanceListSupplier polarisRouterDiscoveryClientServiceInstanceListSupplier(RouterAPI routerAPI,
ConfigurableApplicationContext context) {
- return new PolarisRouterServiceInstanceListSupplier(
+ return new PolarisServiceInstanceListSupplier(
ServiceInstanceListSupplier.builder().withDiscoveryClient().build(context), routerAPI);
}
@@ -90,7 +90,7 @@ public class PolarisLoadBalancerClientConfiguration {
@ConditionalOnProperty(value = "spring.cloud.loadbalancer.configurations", havingValue = "polaris")
public ServiceInstanceListSupplier polarisRouterDiscoveryClientServiceInstanceListSupplier(RouterAPI routerAPI,
ConfigurableApplicationContext context) {
- return new PolarisRouterServiceInstanceListSupplier(
+ return new PolarisServiceInstanceListSupplier(
ServiceInstanceListSupplier.builder().withBlockingDiscoveryClient().build(context), routerAPI);
}
diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerProperties.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerProperties.java
similarity index 59%
rename from spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerProperties.java
rename to spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerProperties.java
index 9acada22..e8feb88a 100644
--- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerProperties.java
+++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerProperties.java
@@ -15,30 +15,34 @@
* specific language governing permissions and limitations under the License.
*/
-package com.tencent.cloud.polaris.router.config;
+package com.tencent.cloud.polaris.loadbalancer.config;
+
+import com.tencent.cloud.common.constant.ContextConstant;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
- * Properties of loadbalancer.
+ * Properties of Polaris loadbalancer.
*
* @author Haotian Zhang
*/
-@ConfigurationProperties("spring.cloud.polaris.ribbon")
+@ConfigurationProperties("spring.cloud.polaris.loadbalancer")
public class PolarisLoadBalancerProperties {
/**
* If load-balance enabled.
*/
- @Value("${spring.cloud.polaris.discovery.loadbalancer.enabled:#{true}}")
- private Boolean loadbalancerEnabled;
+ private Boolean enabled = true;
/**
* Load balance strategy.
*/
- @Value("${spring.cloud.polaris.loadbalancer.strategy:#{'weightedRandom'}}")
- private String strategy;
+ private String strategy = "weightedRandom";
+
+ /**
+ * Type of discovery server.
+ */
+ private String discoveryType = ContextConstant.POLARIS;
public String getStrategy() {
return strategy;
@@ -48,18 +52,26 @@ public class PolarisLoadBalancerProperties {
this.strategy = strategy;
}
- public Boolean getLoadbalancerEnabled() {
- return loadbalancerEnabled;
+ public Boolean getEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(Boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ public String getDiscoveryType() {
+ return discoveryType;
}
- public void setLoadbalancerEnabled(Boolean loadbalancerEnabled) {
- this.loadbalancerEnabled = loadbalancerEnabled;
+ public void setDiscoveryType(String discoveryType) {
+ this.discoveryType = discoveryType;
}
@Override
public String toString() {
- return "PolarisRibbonProperties{" + "loadbalancerEnabled=" + loadbalancerEnabled + ", strategy='" + strategy
- + '\'' + '}';
+ return "PolarisLoadBalancerProperties{" + "loadbalancerEnabled=" + enabled + ", strategy='" + strategy + '\''
+ + '}';
}
}
diff --git a/spring-cloud-starter-tencent-polaris-router/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
similarity index 100%
rename from spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/additional-spring-configuration-metadata.json
rename to spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/additional-spring-configuration-metadata.json
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
new file mode 100644
index 00000000..a13924ba
--- /dev/null
+++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+ com.tencent.cloud.polaris.loadbalancer.config.PolarisLoadBalancerAutoConfiguration
diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerAutoConfigurationTest.java b/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfigurationTest.java
similarity index 97%
rename from spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerAutoConfigurationTest.java
rename to spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfigurationTest.java
index 7c96a8a8..fb7b896c 100644
--- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/PolarisLoadBalancerAutoConfigurationTest.java
+++ b/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfigurationTest.java
@@ -15,7 +15,7 @@
* specific language governing permissions and limitations under the License.
*/
-package com.tencent.cloud.polaris.router.config;
+package com.tencent.cloud.polaris.loadbalancer.config;
import com.tencent.cloud.polaris.context.PolarisContextAutoConfiguration;
import com.tencent.polaris.router.api.core.RouterAPI;
diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/PolarisRouterAutoConfigurationTest.java b/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRouterAutoConfigurationTest.java
similarity index 91%
rename from spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/PolarisRouterAutoConfigurationTest.java
rename to spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRouterAutoConfigurationTest.java
index a29bd7f3..2593095a 100644
--- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/PolarisRouterAutoConfigurationTest.java
+++ b/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRouterAutoConfigurationTest.java
@@ -15,10 +15,10 @@
* specific language governing permissions and limitations under the License.
*/
-package com.tencent.cloud.polaris.router.config;
+package com.tencent.cloud.polaris.loadbalancer.config;
import com.tencent.cloud.polaris.context.PolarisContextAutoConfiguration;
-import com.tencent.cloud.polaris.router.PolarisRouterServiceInstanceListSupplier;
+import com.tencent.cloud.polaris.loadbalancer.PolarisServiceInstanceListSupplier;
import com.tencent.polaris.router.api.core.RouterAPI;
import org.junit.Test;
@@ -59,7 +59,7 @@ public class PolarisRouterAutoConfigurationTest {
.doesNotHaveBean(PolarisLoadBalancerClientConfiguration.PolarisReactiveSupportConfiguration.class);
assertThat(context)
.hasSingleBean(PolarisLoadBalancerClientConfiguration.PolarisBlockingSupportConfiguration.class);
- assertThat(context).doesNotHaveBean(PolarisRouterServiceInstanceListSupplier.class);
+ assertThat(context).doesNotHaveBean(PolarisServiceInstanceListSupplier.class);
});
}
@@ -75,7 +75,7 @@ public class PolarisRouterAutoConfigurationTest {
.doesNotHaveBean(PolarisLoadBalancerClientConfiguration.PolarisReactiveSupportConfiguration.class);
assertThat(context)
.hasSingleBean(PolarisLoadBalancerClientConfiguration.PolarisBlockingSupportConfiguration.class);
- assertThat(context).doesNotHaveBean(PolarisRouterServiceInstanceListSupplier.class);
+ assertThat(context).doesNotHaveBean(PolarisServiceInstanceListSupplier.class);
});
}
From ef5f27f744f510df98c0ed4741e167a7c742ab78 Mon Sep 17 00:00:00 2001
From: SkyeBeFreeman <928016560@qq.com>
Date: Wed, 11 May 2022 14:50:06 +0800
Subject: [PATCH 2/6] docs:update CHANGELOG.md.
---
CHANGELOG.md | 9 +--------
changes/changes-1.3.0.md | 11 +++++++++++
pom.xml | 2 +-
spring-cloud-tencent-dependencies/pom.xml | 2 +-
4 files changed, 14 insertions(+), 10 deletions(-)
create mode 100644 changes/changes-1.3.0.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6aefb4ae..0eab1eb4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,14 +1,7 @@
# Change Log
---
-- [Bugfix: fix router bug and add router example](https://github.com/Tencent/spring-cloud-tencent/pull/109)
-- [feat:add custom label resolver spi for rate limit](https://github.com/Tencent/spring-cloud-tencent/pull/107)
-- [feat:fix discovery weight param not set to register request bug](https://github.com/Tencent/spring-cloud-tencent/pull/104)
-- [Bugfix: fix causing cpu 100% when set ScheduledThreadPoolExecutor corePoolSize=0](https://github.com/Tencent/spring-cloud-tencent/pull/101)
-- [Refactor: refactor transfer metadata](https://github.com/Tencent/spring-cloud-tencent/pull/113)
-- [Bugfix: fix circuitbreaker http code greater than 400 as fail response bug](https://github.com/Tencent/spring-cloud-tencent/pull/118)
-- [Feat: optimize router dependency](https://github.com/Tencent/spring-cloud-tencent/pull/115)
-- [feat:add switch of polaris, discovery and register.](https://github.com/Tencent/spring-cloud-tencent/pull/129)
- [Feature: Support custom rate limit reject response info](https://github.com/Tencent/spring-cloud-tencent/pull/153)
- [Feature: Remove spring-javaformat-maven-plugin](https://github.com/Tencent/spring-cloud-tencent/pull/151)
- [feat:optimize config server address.](https://github.com/Tencent/spring-cloud-tencent/pull/149)
+- [feat:refactor loadbalancer module as a basic module for router and circuit breaker.](https://github.com/Tencent/spring-cloud-tencent/pull/155)
diff --git a/changes/changes-1.3.0.md b/changes/changes-1.3.0.md
new file mode 100644
index 00000000..31f9267b
--- /dev/null
+++ b/changes/changes-1.3.0.md
@@ -0,0 +1,11 @@
+# Change Log
+---
+
+- [Bugfix: fix router bug and add router example](https://github.com/Tencent/spring-cloud-tencent/pull/109)
+- [feat:add custom label resolver spi for rate limit](https://github.com/Tencent/spring-cloud-tencent/pull/107)
+- [feat:fix discovery weight param not set to register request bug](https://github.com/Tencent/spring-cloud-tencent/pull/104)
+- [Bugfix: fix causing cpu 100% when set ScheduledThreadPoolExecutor corePoolSize=0](https://github.com/Tencent/spring-cloud-tencent/pull/101)
+- [Refactor: refactor transfer metadata](https://github.com/Tencent/spring-cloud-tencent/pull/113)
+- [Bugfix: fix circuitbreaker http code greater than 400 as fail response bug](https://github.com/Tencent/spring-cloud-tencent/pull/118)
+- [Feat: optimize router dependency](https://github.com/Tencent/spring-cloud-tencent/pull/115)
+- [feat:add switch of polaris, discovery and register.](https://github.com/Tencent/spring-cloud-tencent/pull/129)
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 8ab7f36f..7bd47278 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,7 +78,7 @@
- 1.4.1-2020.0.5-SNAPSHOT
+ 1.4.2-2020.0.5-SNAPSHOT
2020.0.5
diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml
index bbbea557..ffd6c17d 100644
--- a/spring-cloud-tencent-dependencies/pom.xml
+++ b/spring-cloud-tencent-dependencies/pom.xml
@@ -70,7 +70,7 @@
- 1.4.1-2020.0.5-SNAPSHOT
+ 1.4.2-2020.0.5-SNAPSHOT
1.5.1
2.0.0
From 629859cbc87e1ba193a254d94e67edae77fdc1e7 Mon Sep 17 00:00:00 2001
From: SkyeBeFreeman <928016560@qq.com>
Date: Wed, 11 May 2022 11:53:54 +0800
Subject: [PATCH 3/6] fix:fix routes of gateway doesn't refresh bug.
---
CHANGELOG.md | 1 +
pom.xml | 8 +++
.../polaris/DiscoveryConfigModifier.java | 9 +++
.../polaris/PolarisDiscoveryProperties.java | 13 ++++
.../discovery/PolarisDiscoveryHandler.java | 8 +++
.../PolarisServiceChangeListener.java | 62 +++++++++++++++++++
.../registry/PolarisServiceRegistry.java | 11 +++-
...larisServiceRegistryAutoConfiguration.java | 14 ++++-
...itional-spring-configuration-metadata.json | 6 ++
.../ratelimit/utils/RateLimitUtils.java | 4 +-
.../src/main/resources/bootstrap.yml | 49 ++++++++++++---
src/checkstyle/checkstyle-suppressions.xml | 2 +
12 files changed, 172 insertions(+), 15 deletions(-)
create mode 100644 spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceChangeListener.java
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9cc61c9e..7db7eb18 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,3 +6,4 @@
- [feat:optimize config server address.](https://github.com/Tencent/spring-cloud-tencent/pull/149)
- [feat: override recover router config](https://github.com/Tencent/spring-cloud-tencent/pull/159)
- [feat:refactor loadbalancer module as a basic module for router and circuit breaker.](https://github.com/Tencent/spring-cloud-tencent/pull/155)
+- [fix:fix routes of gateway doesn't refresh bug.](https://github.com/Tencent/spring-cloud-tencent/pull/163)
diff --git a/pom.xml b/pom.xml
index 7bd47278..d99a686c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,6 +61,14 @@
https://github.com/SkyeBeFreeman/
+
+ lepdou
+ lepdou
+ lepdou@126.com
+ Tencent
+ https://github.com/lepdou
+
+
Andrew Shan
samshan08@126.com
diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/DiscoveryConfigModifier.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/DiscoveryConfigModifier.java
index a52a6dd4..67690ef2 100644
--- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/DiscoveryConfigModifier.java
+++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/DiscoveryConfigModifier.java
@@ -24,6 +24,8 @@ import com.tencent.polaris.api.config.consumer.ServiceRouterConfig;
import com.tencent.polaris.factory.config.ConfigurationImpl;
import com.tencent.polaris.plugins.router.healthy.RecoverRouterConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+
/**
* Spring Cloud Tencent config Override polaris config.
*
@@ -31,6 +33,9 @@ import com.tencent.polaris.plugins.router.healthy.RecoverRouterConfig;
*/
public class DiscoveryConfigModifier implements PolarisConfigModifier {
+ @Autowired
+ private PolarisDiscoveryProperties polarisDiscoveryProperties;
+
@Override
public void modify(ConfigurationImpl configuration) {
// Set excludeCircuitBreakInstances to false
@@ -41,6 +46,10 @@ public class DiscoveryConfigModifier implements PolarisConfigModifier {
// Update modified config to source properties
configuration.getConsumer().getServiceRouter()
.setPluginConfig(ServiceRouterConfig.DEFAULT_ROUTER_RECOVER, recoverRouterConfig);
+
+ // Set ServiceRefreshInterval
+ configuration.getConsumer().getLocalCache()
+ .setServiceListRefreshInterval(polarisDiscoveryProperties.getServiceListRefreshInterval());
}
@Override
diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/PolarisDiscoveryProperties.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/PolarisDiscoveryProperties.java
index dc3f3831..24ef50e8 100644
--- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/PolarisDiscoveryProperties.java
+++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/PolarisDiscoveryProperties.java
@@ -105,6 +105,11 @@ public class PolarisDiscoveryProperties {
@Value("${spring.cloud.polaris.discovery.health-check-url:}")
private String healthCheckUrl;
+ /**
+ * Millis interval of refresh of service info list. Default: 60000.
+ */
+ private Long serviceListRefreshInterval = 60000L;
+
@Autowired
private Environment environment;
@@ -215,6 +220,14 @@ public class PolarisDiscoveryProperties {
this.healthCheckUrl = healthCheckUrl;
}
+ public Long getServiceListRefreshInterval() {
+ return serviceListRefreshInterval;
+ }
+
+ public void setServiceListRefreshInterval(Long serviceListRefreshInterval) {
+ this.serviceListRefreshInterval = serviceListRefreshInterval;
+ }
+
@Override
public String toString() {
return "PolarisProperties{" + "token='" + token + '\'' + ", namespace='" + namespace + '\'' + ", service='"
diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java
index 0ea9bb97..53190bf2 100644
--- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java
+++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/discovery/PolarisDiscoveryHandler.java
@@ -33,6 +33,7 @@ import com.tencent.polaris.api.rpc.GetInstancesRequest;
import com.tencent.polaris.api.rpc.GetServicesRequest;
import com.tencent.polaris.api.rpc.InstancesResponse;
import com.tencent.polaris.api.rpc.ServicesResponse;
+import com.tencent.polaris.client.api.SDKContext;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -52,6 +53,9 @@ public class PolarisDiscoveryHandler {
@Autowired
private ProviderAPI providerAPI;
+ @Autowired
+ private SDKContext sdkContext;
+
@Autowired
private ConsumerAPI polarisConsumer;
@@ -112,6 +116,10 @@ public class PolarisDiscoveryHandler {
return providerAPI;
}
+ public SDKContext getSdkContext() {
+ return sdkContext;
+ }
+
/**
* Return all service for given namespace.
* @return service list
diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceChangeListener.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceChangeListener.java
new file mode 100644
index 00000000..d52628f2
--- /dev/null
+++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceChangeListener.java
@@ -0,0 +1,62 @@
+package com.tencent.cloud.polaris.registry;
+
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+import com.google.common.collect.Sets;
+import com.tencent.polaris.api.plugin.registry.AbstractResourceEventListener;
+import com.tencent.polaris.api.pojo.RegistryCacheValue;
+import com.tencent.polaris.api.pojo.ServiceEventKey;
+import com.tencent.polaris.client.pojo.ServicesByProto;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.springframework.cloud.client.discovery.event.HeartbeatEvent;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.ApplicationEventPublisherAware;
+
+/**
+ * Change listener of Polaris service info.
+ *
+ * @author Haotian Zhang
+ */
+public class PolarisServiceChangeListener extends AbstractResourceEventListener implements ApplicationEventPublisherAware {
+
+ private static final Logger LOG = LoggerFactory.getLogger(PolarisServiceChangeListener.class);
+
+ private static final AtomicInteger INDEX = new AtomicInteger(0);
+
+ private ApplicationEventPublisher publisher;
+
+ @Override
+ public void onResourceUpdated(ServiceEventKey svcEventKey, RegistryCacheValue oldValue,
+ RegistryCacheValue newValue) {
+ if (newValue.getEventType() != ServiceEventKey.EventType.SERVICE) {
+ return;
+ }
+ if (oldValue instanceof ServicesByProto && newValue instanceof ServicesByProto) {
+ LOG.debug("receive service={} change event", svcEventKey);
+ Set oldServiceInfoSet = ((ServicesByProto) oldValue).getServices().stream()
+ .map(i -> i.getNamespace() + "::" + i.getService()).collect(Collectors.toSet());
+ Set newServiceInfoSet = ((ServicesByProto) newValue).getServices().stream()
+ .map(i -> i.getNamespace() + "::" + i.getService()).collect(Collectors.toSet());
+
+ Sets.SetView addServiceInfoSetView = Sets.difference(newServiceInfoSet, oldServiceInfoSet);
+ Sets.SetView deleteServiceInfoSetView = Sets.difference(oldServiceInfoSet, newServiceInfoSet);
+
+ if (addServiceInfoSetView.isEmpty() && deleteServiceInfoSetView.isEmpty()) {
+ return;
+ }
+ LOG.info("Service info is update. Add service of {}. Delete service of {}", addServiceInfoSetView, deleteServiceInfoSetView);
+
+ // Trigger reload of gateway route cache.
+ this.publisher.publishEvent(new HeartbeatEvent(this, INDEX.getAndIncrement()));
+ }
+ }
+
+ @Override
+ public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
+ this.publisher = applicationEventPublisher;
+ }
+}
diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java
index a903f780..b2f5e7d7 100644
--- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java
+++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java
@@ -63,8 +63,11 @@ public class PolarisServiceRegistry implements ServiceRegistry {
private final ScheduledExecutorService heartbeatExecutor;
+ private final PolarisServiceChangeListener polarisServiceChangeListener;
+
public PolarisServiceRegistry(PolarisDiscoveryProperties polarisDiscoveryProperties,
- PolarisDiscoveryHandler polarisDiscoveryHandler, MetadataLocalProperties metadataLocalProperties) {
+ PolarisDiscoveryHandler polarisDiscoveryHandler,
+ MetadataLocalProperties metadataLocalProperties, PolarisServiceChangeListener polarisServiceChangeListener) {
this.polarisDiscoveryProperties = polarisDiscoveryProperties;
this.polarisDiscoveryHandler = polarisDiscoveryHandler;
this.metadataLocalProperties = metadataLocalProperties;
@@ -76,6 +79,8 @@ public class PolarisServiceRegistry implements ServiceRegistry {
else {
this.heartbeatExecutor = null;
}
+
+ this.polarisServiceChangeListener = polarisServiceChangeListener;
}
@Override
@@ -112,6 +117,10 @@ public class PolarisServiceRegistry implements ServiceRegistry {
// Start the heartbeat thread after the registration is successful.
heartbeat(heartbeatRequest);
}
+
+ // Register service change listener
+ polarisDiscoveryHandler.getSdkContext().getExtensions().getLocalRegistry()
+ .registerResourceListener(polarisServiceChangeListener);
}
catch (Exception e) {
log.error("polaris registry, {} register failed...{},", registration.getServiceId(), registration, e);
diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java
index 64ac2e81..071947fe 100644
--- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java
+++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java
@@ -27,6 +27,7 @@ import com.tencent.polaris.client.api.SDKContext;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration;
@@ -49,9 +50,11 @@ import org.springframework.context.annotation.Configuration;
public class PolarisServiceRegistryAutoConfiguration {
@Bean
- public PolarisServiceRegistry polarisServiceRegistry(PolarisDiscoveryProperties polarisDiscoveryProperties,
- PolarisDiscoveryHandler polarisDiscoveryHandler, MetadataLocalProperties metadataLocalProperties) {
- return new PolarisServiceRegistry(polarisDiscoveryProperties, polarisDiscoveryHandler, metadataLocalProperties);
+ public PolarisServiceRegistry polarisServiceRegistry(
+ PolarisDiscoveryProperties polarisDiscoveryProperties, PolarisDiscoveryHandler polarisDiscoveryHandler,
+ MetadataLocalProperties metadataLocalProperties, PolarisServiceChangeListener polarisServiceChangeListener) {
+ return new PolarisServiceRegistry(polarisDiscoveryProperties,
+ polarisDiscoveryHandler, metadataLocalProperties, polarisServiceChangeListener);
}
@Bean
@@ -69,4 +72,9 @@ public class PolarisServiceRegistryAutoConfiguration {
return new PolarisAutoServiceRegistration(registry, autoServiceRegistrationProperties, registration);
}
+ @Bean
+ @ConditionalOnMissingBean
+ public PolarisServiceChangeListener polarisServiceChangeListener() {
+ return new PolarisServiceChangeListener();
+ }
}
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 eb160ae9..7743b5f6 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
@@ -59,6 +59,12 @@
"type": "java.lang.Integer",
"defaultValue": 100,
"description": "the weight of polaris instance , use to load-balance."
+ },
+ {
+ "name": "spring.cloud.polaris.discovery.service-list-refresh-interval",
+ "type": "java.lang.Long",
+ "defaultValue": 60000,
+ "description": "Millis interval of refresh of service info list. Default: 60000."
}
]
}
diff --git a/spring-cloud-starter-tencent-polaris-ratelimit/src/main/java/com/tencent/cloud/polaris/ratelimit/utils/RateLimitUtils.java b/spring-cloud-starter-tencent-polaris-ratelimit/src/main/java/com/tencent/cloud/polaris/ratelimit/utils/RateLimitUtils.java
index 2e036909..467a53d2 100644
--- a/spring-cloud-starter-tencent-polaris-ratelimit/src/main/java/com/tencent/cloud/polaris/ratelimit/utils/RateLimitUtils.java
+++ b/spring-cloud-starter-tencent-polaris-ratelimit/src/main/java/com/tencent/cloud/polaris/ratelimit/utils/RateLimitUtils.java
@@ -21,7 +21,6 @@ package com.tencent.cloud.polaris.ratelimit.utils;
import com.tencent.cloud.common.util.ResourceFileUtils;
import com.tencent.cloud.polaris.ratelimit.config.PolarisRateLimitProperties;
import com.tencent.cloud.polaris.ratelimit.constant.RateLimitConstant;
-import com.tencent.cloud.polaris.ratelimit.filter.QuotaCheckServletFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,8 +33,7 @@ import org.springframework.util.StringUtils;
*/
public final class RateLimitUtils {
- private static final Logger LOG = LoggerFactory
- .getLogger(QuotaCheckServletFilter.class);
+ private static final Logger LOG = LoggerFactory.getLogger(RateLimitUtils.class);
private RateLimitUtils() {
diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/src/main/resources/bootstrap.yml
index b820b2ee..8acb66cb 100644
--- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/src/main/resources/bootstrap.yml
+++ b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-scg-service/src/main/resources/bootstrap.yml
@@ -15,19 +15,52 @@ spring:
address: grpc://127.0.0.1:8091
namespace: default
enabled: true
+ discovery:
+ service-list-refresh-interval: 1000
gateway:
discovery:
locator:
enabled: true
- lowerCaseServiceId: false
- routes:
- - id: GatewayCalleeService
- uri: lb://GatewayCalleeService
- predicates:
- - Path=/GatewayCalleeService/**
- filters:
- - StripPrefix=1
+ 'predicates[0]':
+ name: Path
+ args:
+ patterns: '''/'' + serviceId + ''/**'''
+ 'filters[0]':
+ name: RewritePath
+ args:
+ regexp: '''/'' + serviceId + ''/(?.*)'''
+ replacement: '''/$\{remaining}'''
+ 'filters[1]':
+ name: Retry
+ args:
+ retries: 3
+ exceptions:
+ '[0]': '''java.net.ConnectException'''
+ '[1]': '''java.io.IOException'''
+ statuses:
+ '[0]': '''BAD_GATEWAY'''
+ '[1]': '''SERVICE_UNAVAILABLE'''
+ series:
+ '[0]': '''CLIENT_ERROR'''
+ methods:
+ '[0]': '''GET'''
+ '[1]': '''POST'''
+ '[2]': '''PUT'''
+ '[3]': '''DELETE'''
+ backoff:
+ firstBackoff: '''100ms'''
+ maxBackoff: '''500ms'''
+ factor: 2
+ basedOnPreviousValue: false
+# routes:
+# - id: GatewayCalleeService
+# uri: lb://GatewayCalleeService
+# predicates:
+# - Path=/GatewayCalleeService/**
+# filters:
+# - StripPrefix=1
logging:
level:
org.springframework.cloud.gateway: info
+ com.tencent.cloud.polaris: debug
diff --git a/src/checkstyle/checkstyle-suppressions.xml b/src/checkstyle/checkstyle-suppressions.xml
index 5993108d..ace6b329 100644
--- a/src/checkstyle/checkstyle-suppressions.xml
+++ b/src/checkstyle/checkstyle-suppressions.xml
@@ -4,4 +4,6 @@
"https://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
+
+
\ No newline at end of file
From 36bb1a9280f5889fcdefcda25d038ce704f16325 Mon Sep 17 00:00:00 2001
From: SkyeBeFreeman <928016560@qq.com>
Date: Thu, 12 May 2022 16:59:10 +0800
Subject: [PATCH 4/6] feat:use 1.5.2-SNAPSHOT version of polaris-java.
---
spring-cloud-tencent-dependencies/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml
index ffd6c17d..d6a11434 100644
--- a/spring-cloud-tencent-dependencies/pom.xml
+++ b/spring-cloud-tencent-dependencies/pom.xml
@@ -71,7 +71,7 @@
1.4.2-2020.0.5-SNAPSHOT
- 1.5.1
+ 1.5.2-SNAPSHOT
2.0.0
From 4ed7e62436c35dbdeaacd380a034c10bde81b98b Mon Sep 17 00:00:00 2001
From: SkyeBeFreeman <928016560@qq.com>
Date: Mon, 25 Apr 2022 15:04:54 +0800
Subject: [PATCH 5/6] feat:optimize code.
---
spring-cloud-starter-tencent-polaris-discovery/pom.xml | 2 +-
.../additional-spring-configuration-metadata.json | 10 ++++++++--
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/spring-cloud-starter-tencent-polaris-discovery/pom.xml b/spring-cloud-starter-tencent-polaris-discovery/pom.xml
index d011b543..74101b71 100644
--- a/spring-cloud-starter-tencent-polaris-discovery/pom.xml
+++ b/spring-cloud-starter-tencent-polaris-discovery/pom.xml
@@ -17,7 +17,7 @@
com.tencent.cloud
- spring-cloud-tencent-polaris-context
+ spring-cloud-tencent-polaris-loadbalancer
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
index c94ac4e0..5ecb156b 100644
--- 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
@@ -4,13 +4,19 @@
"name": "spring.cloud.polaris.loadbalancer.enabled",
"type": "java.lang.Boolean",
"defaultValue": "true",
- "description": "polaris loadbalancer"
+ "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"
+ "description": "retry,best_available,availability_filtering,round_robin,weighted_response_time,zone_avoidance,random,consistent_hash,weighted_random."
}
]
}
From 29bb2e87f2bf1937e264341baa1f0134ce5097f5 Mon Sep 17 00:00:00 2001
From: SkyeBeFreeman <928016560@qq.com>
Date: Fri, 13 May 2022 16:35:28 +0800
Subject: [PATCH 6/6] release:release 1.4.2-2020.0.5.
---
pom.xml | 2 +-
spring-cloud-tencent-dependencies/pom.xml | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index d99a686c..8abe0aea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,7 +86,7 @@
- 1.4.2-2020.0.5-SNAPSHOT
+ 1.4.2-2020.0.5
2020.0.5
diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml
index d6a11434..3c3a36f4 100644
--- a/spring-cloud-tencent-dependencies/pom.xml
+++ b/spring-cloud-tencent-dependencies/pom.xml
@@ -70,8 +70,8 @@
- 1.4.2-2020.0.5-SNAPSHOT
- 1.5.2-SNAPSHOT
+ 1.4.2-2020.0.5
+ 1.5.2
2.0.0