diff --git a/pom.xml b/pom.xml
index efba570c8..576f340ce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-build
- 2.3.4.RELEASE
+ 3.0.1
4.0.0
@@ -71,10 +71,10 @@
- 1.1.4.Hoxton.SR9-SNAPSHOT
+ 2020.0.1-SNAPSHOT
- Hoxton.SR9
+ 2020.0.1
0.8.3
diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml
index 7922fa66d..a3d57f40a 100644
--- a/spring-cloud-tencent-dependencies/pom.xml
+++ b/spring-cloud-tencent-dependencies/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-dependencies-parent
- 2.3.1.RELEASE
+ 3.0.1
4.0.0
@@ -62,7 +62,8 @@
- 1.1.4.Hoxton.SR9-SNAPSHOT
+ 2020.0.1-SNAPSHOT
+ 23.0
1.2.0
10.0.0-M6
2.0.0
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 5bf16820e..162294685 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
@@ -20,7 +20,7 @@
ch.qos.logback
logback-core
- 1.2.3
+ 1.2.6
compile
@@ -53,12 +53,6 @@
feign-okhttp
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-ribbon
-
-
org.springframework.retry
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b/pom.xml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b/pom.xml
index 2c56070ed..c2651bb25 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b/pom.xml
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b/pom.xml
@@ -20,7 +20,7 @@
ch.qos.logback
logback-core
- 1.2.3
+ 1.2.6
compile
@@ -51,12 +51,6 @@
feign-okhttp
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-ribbon
-
-
org.springframework.retry
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/pom.xml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/pom.xml
index d337185ec..f5591f58c 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/pom.xml
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/pom.xml
@@ -42,18 +42,6 @@
spring-cloud-starter-openfeign
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-hystrix
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-ribbon
-
-
org.springframework.retry
diff --git a/spring-cloud-tencent-examples/polaris-discovery-example/pom.xml b/spring-cloud-tencent-examples/polaris-discovery-example/pom.xml
index f4f0add80..ac9e8971f 100644
--- a/spring-cloud-tencent-examples/polaris-discovery-example/pom.xml
+++ b/spring-cloud-tencent-examples/polaris-discovery-example/pom.xml
@@ -43,18 +43,6 @@
spring-cloud-starter-openfeign
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-hystrix
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-ribbon
-
-
org.springframework.retry
diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-zuul-service/pom.xml b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-zuul-service/pom.xml
deleted file mode 100644
index 0c149c8d4..000000000
--- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-zuul-service/pom.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
- polaris-gateway-example
- com.tencent.cloud
- ${revision}
- ../pom.xml
-
- 4.0.0
-
- gateway-zuul-service
- Spring Cloud Starter Tencent Polaris Gateway Zuul Example
-
-
-
- spring-cloud-starter-tencent-polaris-discovery
- com.tencent.cloud
-
-
-
- com.tencent.cloud
- spring-cloud-tencent-polaris-gateway
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-zuul
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
-
-
\ No newline at end of file
diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-zuul-service/src/main/resources/application.yml b/spring-cloud-tencent-examples/polaris-gateway-example/gateway-zuul-service/src/main/resources/application.yml
deleted file mode 100644
index c191c5e4b..000000000
--- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-zuul-service/src/main/resources/application.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-server:
- session-timeout: 1800
- port: 48082
-spring:
- application:
- name: GatewayZuulService
- cloud:
- polaris:
- address: grpc://127.0.0.1:8091
- tencent:
- metadata:
- content:
- a: 1
- transitive:
- - a
-zuul:
- routes:
- GatewayCalleeService:
- serviceId: GatewayCalleeService
- path: /GatewayCalleeService/**
diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/pom.xml b/spring-cloud-tencent-examples/polaris-gateway-example/pom.xml
index 073bd0e6b..f3815f60d 100644
--- a/spring-cloud-tencent-examples/polaris-gateway-example/pom.xml
+++ b/spring-cloud-tencent-examples/polaris-gateway-example/pom.xml
@@ -15,7 +15,6 @@
Spring Cloud Starter Tencent Polaris Gateway Example
- gateway-zuul-service
gateway-scg-service
gateway-callee-service
@@ -32,19 +31,6 @@
org.springframework.cloud
spring-cloud-starter-openfeign
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-hystrix
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-ribbon
-
-
org.springframework.retry
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml
index 632fde33f..c0697f5ad 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml
@@ -52,11 +52,5 @@
spring-boot-starter-test
test
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-ribbon
- test
-
\ No newline at end of file
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/pom.xml b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/pom.xml
index fa2cabb05..d96db3d21 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/pom.xml
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/pom.xml
@@ -50,11 +50,6 @@
-
- org.springframework.cloud
- spring-cloud-starter-netflix-ribbon
-
-
org.springframework.boot
spring-boot-starter-web
@@ -67,6 +62,12 @@
true
+
+ org.springframework.cloud
+ spring-cloud-loadbalancer
+ true
+
+
org.springframework.boot
spring-boot-starter-test
@@ -90,5 +91,11 @@
powermock-api-mockito2
test
+
+ org.springframework.cloud
+ spring-cloud-loadbalancer
+ 3.0.1
+ compile
+
\ No newline at end of file
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/ConditionalOnLoadBalancerPolaris.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/ConditionalOnLoadBalancerPolaris.java
new file mode 100644
index 000000000..e85b3de52
--- /dev/null
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/ConditionalOnLoadBalancerPolaris.java
@@ -0,0 +1,34 @@
+/*
+ * 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.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+
+/**
+ * @author liaochuntao
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE, ElementType.METHOD})
+@ConditionalOnProperty(value = "spring.cloud.loadbalancer.polaris.enabled", havingValue = "true")
+public @interface ConditionalOnLoadBalancerPolaris {
+
+}
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisDiscoveryRibbonAutoConfiguration.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerPolarisAutoConfiguration.java
similarity index 69%
rename from spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisDiscoveryRibbonAutoConfiguration.java
rename to spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerPolarisAutoConfiguration.java
index 869c73281..3b6bc537a 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisDiscoveryRibbonAutoConfiguration.java
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/LoadBalancerPolarisAutoConfiguration.java
@@ -15,23 +15,21 @@
* specific language governing permissions and limitations under the License.
*/
-package com.tencent.cloud.polaris.ribbon;
+package com.tencent.cloud.polaris.loadbalancer;
import com.tencent.cloud.polaris.discovery.ConditionalOnPolarisDiscoveryEnabled;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
-import org.springframework.cloud.netflix.ribbon.RibbonClients;
+import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.context.annotation.Configuration;
/**
- * @author Haotian Zhang, Andrew Shan, Jie Cheng
+ * @author liaochuntao
*/
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties
+@ConditionalOnLoadBalancerPolaris
@ConditionalOnPolarisDiscoveryEnabled
-@AutoConfigureAfter(RibbonAutoConfiguration.class)
-@RibbonClients(defaultConfiguration = PolarisRibbonServerListConfiguration.class)
-public class PolarisDiscoveryRibbonAutoConfiguration {
+@LoadBalancerClients(defaultConfiguration = PolarisLoadBalancerClientConfiguration.class)
+public class LoadBalancerPolarisAutoConfiguration {
}
diff --git a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-zuul-service/src/main/java/com/tencent/cloud/polaris/gateway/example/zuul/GatewayZuulApplication.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java
similarity index 62%
rename from spring-cloud-tencent-examples/polaris-gateway-example/gateway-zuul-service/src/main/java/com/tencent/cloud/polaris/gateway/example/zuul/GatewayZuulApplication.java
rename to spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java
index b748b986e..ea5a82b1b 100644
--- a/spring-cloud-tencent-examples/polaris-gateway-example/gateway-zuul-service/src/main/java/com/tencent/cloud/polaris/gateway/example/zuul/GatewayZuulApplication.java
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadBalancerClientConfiguration.java
@@ -15,21 +15,16 @@
* specific language governing permissions and limitations under the License.
*/
-package com.tencent.cloud.polaris.gateway.example.zuul;
+package com.tencent.cloud.polaris.loadbalancer;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
+import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
+import org.springframework.context.annotation.Configuration;
/**
- * @author Haotian Zhang
+ * @author liaochuntao
*/
-@SpringBootApplication
-@EnableZuulProxy
-public class GatewayZuulApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(GatewayZuulApplication.class, args);
- }
+@Configuration(proxyBeanMethods = false)
+@ConditionalOnDiscoveryEnabled
+public class PolarisLoadBalancerClientConfiguration {
}
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadbalancer.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadbalancer.java
new file mode 100644
index 000000000..710805e4c
--- /dev/null
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/loadbalancer/PolarisLoadbalancer.java
@@ -0,0 +1,80 @@
+/*
+ * 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.PolarisProperties;
+import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.loadbalancer.DefaultResponse;
+import org.springframework.cloud.client.loadbalancer.EmptyResponse;
+import org.springframework.cloud.client.loadbalancer.Request;
+import org.springframework.cloud.client.loadbalancer.Response;
+import org.springframework.cloud.loadbalancer.core.NoopServiceInstanceListSupplier;
+import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer;
+import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
+import reactor.core.publisher.Mono;
+
+/**
+ * @author liaochuntao
+ */
+public class PolarisLoadbalancer implements ReactorServiceInstanceLoadBalancer {
+
+ private static final Logger log = LoggerFactory.getLogger(PolarisLoadbalancer.class);
+
+ private final String serviceId;
+
+ private ObjectProvider supplierObjectProvider;
+
+ private final PolarisProperties discoveryProperties;
+
+ public PolarisLoadbalancer(String serviceId,
+ ObjectProvider supplierObjectProvider,
+ PolarisProperties discoveryProperties) {
+ this.serviceId = serviceId;
+ this.supplierObjectProvider = supplierObjectProvider;
+ this.discoveryProperties = discoveryProperties;
+ }
+
+ @Override
+ public Mono> choose(Request request) {
+ ServiceInstanceListSupplier supplier = supplierObjectProvider.getIfAvailable(NoopServiceInstanceListSupplier::new);
+ return supplier.get().next().map(this::getInstanceResponse);
+ }
+
+ private Response getInstanceResponse(List serviceInstances) {
+ if (serviceInstances.isEmpty()) {
+ log.warn("No servers available for service: " + this.serviceId);
+ return new EmptyResponse();
+ }
+
+ try {
+ ServiceInstance instance = NacosBalancer.getHostByRandomWeight3(serviceInstances);
+ return new DefaultResponse(instance);
+ }
+ catch (Exception e) {
+ log.warn("NacosLoadBalancer error", e);
+ return new EmptyResponse();
+ }
+
+ }
+
+}
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisServerList.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisServerList.java
deleted file mode 100644
index 7ae86665b..000000000
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisServerList.java
+++ /dev/null
@@ -1,74 +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.ribbon;
-
-import com.netflix.client.config.IClientConfig;
-import com.netflix.loadbalancer.AbstractServerList;
-import com.netflix.loadbalancer.Server;
-import com.tencent.cloud.polaris.pojo.PolarisServer;
-import com.tencent.polaris.api.pojo.Instance;
-import com.tencent.polaris.api.pojo.ServiceInstances;
-import com.tencent.polaris.api.rpc.InstancesResponse;
-import com.tencent.cloud.polaris.discovery.PolarisDiscoveryHandler;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Haotian Zhang, Andrew Shan, Jie Cheng
- */
-public class PolarisServerList extends AbstractServerList {
-
- private String serviceId;
-
- private PolarisDiscoveryHandler polarisDiscoveryHandler;
-
- public PolarisServerList(PolarisDiscoveryHandler polarisDiscoveryHandler) {
- this.polarisDiscoveryHandler = polarisDiscoveryHandler;
- }
-
- @Override
- public List getInitialListOfServers() {
- return getServers();
- }
-
- @Override
- public List getUpdatedListOfServers() {
- return getServers();
- }
-
- private List getServers() {
- InstancesResponse filteredInstances = polarisDiscoveryHandler.getInstances(serviceId);
- ServiceInstances serviceInstances = filteredInstances.toServiceInstances();
- List polarisServers = new ArrayList<>();
- for (Instance instance : serviceInstances.getInstances()) {
- polarisServers.add(new PolarisServer(serviceInstances, instance));
- }
- return polarisServers;
- }
-
- public String getServiceId() {
- return serviceId;
- }
-
- @Override
- public void initWithNiwsConfig(IClientConfig iClientConfig) {
- this.serviceId = iClientConfig.getClientName();
- }
-
-}
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-ratelimit/pom.xml b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-ratelimit/pom.xml
index acf7e431c..568e0a975 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-ratelimit/pom.xml
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-ratelimit/pom.xml
@@ -67,12 +67,6 @@
test
-
- org.springframework.cloud
- spring-cloud-starter-netflix-ribbon
- test
-
-
org.powermock
powermock-module-junit4
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/pom.xml b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/pom.xml
index 41697663a..cbfd8ad68 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/pom.xml
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/pom.xml
@@ -31,6 +31,12 @@
+
+ org.springframework.cloud
+ spring-cloud-loadbalancer
+ true
+
+
com.tencent.polaris
@@ -43,12 +49,6 @@
test
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-ribbon
-
-
org.springframework.boot
spring-boot-starter-test
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRoutingLoadBalancer.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRoutingLoadBalancer.java
index 5c2258efe..2ecec187b 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRoutingLoadBalancer.java
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/PolarisRoutingLoadBalancer.java
@@ -17,16 +17,9 @@
package com.tencent.cloud.polaris.router;
-import com.netflix.client.config.IClientConfig;
-import com.netflix.loadbalancer.DynamicServerListLoadBalancer;
-import com.netflix.loadbalancer.IPing;
-import com.netflix.loadbalancer.IRule;
-import com.netflix.loadbalancer.PollingServerListUpdater;
-import com.netflix.loadbalancer.Server;
-import com.netflix.loadbalancer.ServerList;
import com.tencent.cloud.metadata.constant.MetadataConstant.SystemMetadataKey;
import com.tencent.cloud.metadata.context.MetadataContextHolder;
-import com.tencent.cloud.polaris.pojo.PolarisServer;
+import com.tencent.cloud.polaris.pojo.PolarisServiceInstance;
import com.tencent.polaris.api.pojo.DefaultInstance;
import com.tencent.polaris.api.pojo.DefaultServiceInstances;
import com.tencent.polaris.api.pojo.Instance;
@@ -36,64 +29,48 @@ import com.tencent.polaris.api.pojo.ServiceKey;
import com.tencent.polaris.router.api.core.RouterAPI;
import com.tencent.polaris.router.api.rpc.ProcessRoutersRequest;
import com.tencent.polaris.router.api.rpc.ProcessRoutersResponse;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.util.CollectionUtils;
-
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.util.CollectionUtils;
/**
* @author Haotian Zhang
*/
-public class PolarisRoutingLoadBalancer extends DynamicServerListLoadBalancer {
+public class PolarisRoutingLoadBalancer {
private final RouterAPI routerAPI;
- public PolarisRoutingLoadBalancer(IClientConfig config, IRule rule, IPing ping,
- ServerList serverList, RouterAPI routerAPI) {
- super(config, rule, ping, serverList, null, new PollingServerListUpdater());
+ public PolarisRoutingLoadBalancer(RouterAPI routerAPI) {
this.routerAPI = routerAPI;
}
- @Override
- public List getReachableServers() {
- List allServers = super.getAllServers();
+ public List chooseInstances(List allServers) {
if (CollectionUtils.isEmpty(allServers)) {
return allServers;
}
ServiceInstances serviceInstances = null;
- if (allServers.get(0) instanceof PolarisServer) {
- serviceInstances = ((PolarisServer) allServers.get(0)).getServiceInstances();
- } else {
- String serviceName;
- // notice the difference between different service registries
- if (StringUtils.isNotBlank(allServers.get(0).getMetaInfo().getServiceIdForDiscovery())) {
- serviceName = allServers.get(0).getMetaInfo().getServiceIdForDiscovery();
- } else {
- serviceName = allServers.get(0).getMetaInfo().getAppName();
- }
- if (StringUtils.isBlank(serviceName)) {
- throw new IllegalStateException(
- "PolarisRoutingLoadBalancer only Server with AppName or ServiceIdForDiscovery attribute");
- }
- ServiceKey serviceKey = new ServiceKey(MetadataContextHolder.LOCAL_NAMESPACE, serviceName);
- List instances = new ArrayList<>(8);
- for (Server server : allServers) {
- DefaultInstance instance = new DefaultInstance();
- instance.setNamespace(MetadataContextHolder.LOCAL_NAMESPACE);
- instance.setService(serviceName);
- instance.setHealthy(server.isAlive());
- instance.setProtocol(server.getScheme());
- instance.setId(server.getId());
- instance.setHost(server.getHost());
- instance.setPort(server.getPort());
- instance.setZone(server.getZone());
- instance.setWeight(100);
- instances.add(instance);
- }
- serviceInstances = new DefaultServiceInstances(serviceKey, instances);
+ String serviceName = allServers.get(0).getServiceId();
+ if (StringUtils.isBlank(serviceName)) {
+ throw new IllegalStateException(
+ "PolarisRoutingLoadBalancer only Server with AppName or ServiceIdForDiscovery attribute");
+ }
+ ServiceKey serviceKey = new ServiceKey(MetadataContextHolder.LOCAL_NAMESPACE, serviceName);
+ List instances = new ArrayList<>(8);
+ for (ServiceInstance server : allServers) {
+ DefaultInstance instance = new DefaultInstance();
+ instance.setNamespace(MetadataContextHolder.LOCAL_NAMESPACE);
+ instance.setService(serviceName);
+ instance.setProtocol(server.getScheme());
+ instance.setId(server.getInstanceId());
+ instance.setHost(server.getHost());
+ instance.setPort(server.getPort());
+ instance.setWeight(100);
+ instances.add(instance);
}
+ serviceInstances = new DefaultServiceInstances(serviceKey, instances);
ProcessRoutersRequest processRoutersRequest = new ProcessRoutersRequest();
processRoutersRequest.setDstInstances(serviceInstances);
String srcNamespace = MetadataContextHolder.get().getSystemMetadata(SystemMetadataKey.LOCAL_NAMESPACE);
@@ -110,15 +87,11 @@ public class PolarisRoutingLoadBalancer extends DynamicServerListLoadBalancer filteredInstances = new ArrayList<>();
+ List filteredInstances = new ArrayList<>();
for (Instance instance : filteredServiceInstances.getInstances()) {
- filteredInstances.add(new PolarisServer(serviceInstances, instance));
+ filteredInstances.add(new PolarisServiceInstance(instance));
}
return filteredInstances;
}
- @Override
- public List getAllServers() {
- return getReachableServers();
- }
}
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRibbonClientConfiguration.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRibbonClientConfiguration.java
deleted file mode 100644
index 5d0ed05b0..000000000
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRibbonClientConfiguration.java
+++ /dev/null
@@ -1,56 +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.router.config;
-
-import com.netflix.client.config.IClientConfig;
-import com.netflix.loadbalancer.ILoadBalancer;
-import com.netflix.loadbalancer.IPing;
-import com.netflix.loadbalancer.IRule;
-import com.netflix.loadbalancer.Server;
-import com.netflix.loadbalancer.ServerList;
-import com.tencent.cloud.polaris.router.PolarisRoutingLoadBalancer;
-import com.tencent.cloud.polaris.router.rule.PolarisLoadBalanceRule;
-import com.tencent.cloud.polaris.router.rule.PolarisWeightedRandomRule;
-import com.tencent.polaris.router.api.core.RouterAPI;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * @author Haotian Zhang
- */
-@Configuration
-public class PolarisRibbonClientConfiguration {
-
- @Bean
- @ConditionalOnMissingBean
- public IRule polarisRibbonRule(PolarisRibbonProperties polarisRibbonProperties) {
- switch (PolarisLoadBalanceRule.fromStrategy(polarisRibbonProperties.getPolicy())) {
- case WEIGHTED_RANDOM_RULE:
- default:
- return new PolarisWeightedRandomRule();
- }
- }
-
- @Bean
- @ConditionalOnMissingBean
- public ILoadBalancer polarisRoutingLoadBalancer(IClientConfig iClientConfig, IRule iRule, IPing iPing,
- ServerList serverList, RouterAPI polarisRouter) {
- return new PolarisRoutingLoadBalancer(iClientConfig, iRule, iPing, serverList, polarisRouter);
- }
-}
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRibbonAutoConfiguration.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterAutoConfiguration.java
similarity index 77%
rename from spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRibbonAutoConfiguration.java
rename to spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterAutoConfiguration.java
index 8d33972ae..94d8f311b 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRibbonAutoConfiguration.java
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterAutoConfiguration.java
@@ -21,12 +21,9 @@ 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.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
-import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -35,17 +32,15 @@ import org.springframework.context.annotation.Configuration;
*
* @author Haotian Zhang
*/
-@Configuration(proxyBeanMethods = false)
+@Configuration()
@EnableConfigurationProperties
@ConditionalOnProperty(value = "spring.cloud.polaris.loadbalancer.enabled", matchIfMissing = true)
-@AutoConfigureAfter(RibbonAutoConfiguration.class)
-@RibbonClients(defaultConfiguration = PolarisRibbonClientConfiguration.class)
-public class PolarisRibbonAutoConfiguration {
+public class PolarisRouterAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public PolarisRibbonProperties polarisRibbonProperties() {
- return new PolarisRibbonProperties();
+ public PolarisRouterProperties polarisRibbonProperties() {
+ return new PolarisRouterProperties();
}
@Bean(name = "polarisRoute")
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisRibbonServerListConfiguration.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterClientConfiguration.java
similarity index 57%
rename from spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisRibbonServerListConfiguration.java
rename to spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterClientConfiguration.java
index 74efa1320..43b3fee15 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisRibbonServerListConfiguration.java
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterClientConfiguration.java
@@ -15,28 +15,19 @@
* specific language governing permissions and limitations under the License.
*/
-package com.tencent.cloud.polaris.ribbon;
+package com.tencent.cloud.polaris.router.config;
-import com.netflix.client.config.IClientConfig;
-import com.netflix.loadbalancer.Server;
-import com.netflix.loadbalancer.ServerList;
-import com.tencent.cloud.polaris.discovery.PolarisDiscoveryHandler;
+import com.tencent.cloud.polaris.router.PolarisRoutingLoadBalancer;
+import com.tencent.cloud.polaris.router.rule.PolarisLoadBalanceRule;
+import com.tencent.polaris.router.api.core.RouterAPI;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
- * @author Haotian Zhang, Andrew Shan, Jie Cheng
+ * @author Haotian Zhang
*/
@Configuration
-public class PolarisRibbonServerListConfiguration {
+public class PolarisRouterClientConfiguration {
- @Bean
- @ConditionalOnMissingBean
- public ServerList ribbonServerList(PolarisDiscoveryHandler polarisDiscoveryHandler,
- IClientConfig iClientConfig) {
- PolarisServerList serverList = new PolarisServerList(polarisDiscoveryHandler);
- serverList.initWithNiwsConfig(iClientConfig);
- return serverList;
- }
}
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRibbonProperties.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterProperties.java
similarity index 98%
rename from spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRibbonProperties.java
rename to spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterProperties.java
index 6e6ab5014..47575d105 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRibbonProperties.java
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/config/PolarisRouterProperties.java
@@ -24,7 +24,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* @author Haotian Zhang
*/
@ConfigurationProperties("spring.cloud.polaris.ribbon")
-public class PolarisRibbonProperties {
+public class PolarisRouterProperties {
/**
* 是否开启负载均衡
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/rule/PolarisWeightedRandomRule.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/rule/PolarisWeightedRandomRule.java
deleted file mode 100644
index d9dffa23a..000000000
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/rule/PolarisWeightedRandomRule.java
+++ /dev/null
@@ -1,67 +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.router.rule;
-
-import com.netflix.client.config.IClientConfig;
-import com.netflix.loadbalancer.AbstractLoadBalancerRule;
-import com.netflix.loadbalancer.Server;
-import com.tencent.cloud.polaris.pojo.PolarisServer;
-import com.tencent.polaris.api.config.consumer.LoadBalanceConfig;
-import com.tencent.polaris.api.pojo.Instance;
-import com.tencent.polaris.router.api.core.RouterAPI;
-import com.tencent.polaris.router.api.rpc.ProcessLoadBalanceRequest;
-import com.tencent.polaris.router.api.rpc.ProcessLoadBalanceResponse;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.CollectionUtils;
-
-import java.util.List;
-
-/**
- * @author Haotian Zhang
- */
-public class PolarisWeightedRandomRule extends AbstractLoadBalancerRule {
-
- private static final String POLICY = LoadBalanceConfig.LOAD_BALANCE_WEIGHTED_RANDOM;
-
- @Autowired
- private RouterAPI polarisRouter;
-
- @Override
- public void initWithNiwsConfig(IClientConfig clientConfig) {
-
- }
-
- @Override
- public Server choose(Object key) {
- List allServers = getLoadBalancer().getReachableServers();
- if (CollectionUtils.isEmpty(allServers)) {
- return null;
- }
- Server server = allServers.get(0);
- if (!(server instanceof PolarisServer)) {
- throw new IllegalStateException("PolarisDiscoveryRule only support PolarisServer instances");
- }
- PolarisServer polarisServer = (PolarisServer) server;
- ProcessLoadBalanceRequest request = new ProcessLoadBalanceRequest();
- request.setDstInstances(polarisServer.getServiceInstances());
- request.setLbPolicy(POLICY);
- ProcessLoadBalanceResponse processLoadBalanceResponse = polarisRouter.processLoadBalance(request);
- Instance targetInstance = processLoadBalanceResponse.getTargetInstance();
- return new PolarisServer(polarisServer.getServiceInstances(), targetInstance);
- }
-}
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories
index 75c191046..5519d1071 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/main/resources/META-INF/spring.factories
@@ -1,2 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
- com.tencent.cloud.polaris.router.config.PolarisRibbonAutoConfiguration
+ com.tencent.cloud.polaris.router.config.PolarisRouterAutoConfiguration
diff --git a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/PolarisRibbonAutoConfigurationTest.java b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/PolarisRibbonAutoConfigurationTest.java
index b6ec3abe6..7e00e75c0 100644
--- a/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/PolarisRibbonAutoConfigurationTest.java
+++ b/spring-cloud-tencent-starters/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/config/PolarisRibbonAutoConfigurationTest.java
@@ -36,7 +36,7 @@ public class PolarisRibbonAutoConfigurationTest {
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(
PolarisRibbonTest.class,
- PolarisRibbonAutoConfiguration.class))
+ PolarisRouterAutoConfiguration.class))
.withPropertyValues("spring.application.name=" + SERVICE_PROVIDER)
.withPropertyValues("server.port=" + PORT)
.withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081");
@@ -45,7 +45,7 @@ public class PolarisRibbonAutoConfigurationTest {
public void testDefaultInitialization() {
this.contextRunner.run(context -> {
assertThat(context).hasSingleBean(RouterAPI.class);
- assertThat(context).hasSingleBean(PolarisRibbonProperties.class);
+ assertThat(context).hasSingleBean(PolarisRouterProperties.class);
});
}
diff --git a/spring-cloud-tencent-starters/spring-cloud-tencent-commons/pom.xml b/spring-cloud-tencent-starters/spring-cloud-tencent-commons/pom.xml
index 66d33281f..f880f91a7 100644
--- a/spring-cloud-tencent-starters/spring-cloud-tencent-commons/pom.xml
+++ b/spring-cloud-tencent-starters/spring-cloud-tencent-commons/pom.xml
@@ -42,15 +42,11 @@
spring-cloud-commons
-
- com.netflix.ribbon
- ribbon-loadbalancer
-
-
-
- com.google.guava
- guava
-
+
+
+
+
+
commons-collections
diff --git a/spring-cloud-tencent-starters/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/polaris/pojo/PolarisServer.java b/spring-cloud-tencent-starters/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/polaris/pojo/PolarisServer.java
deleted file mode 100644
index eeb8c74b7..000000000
--- a/spring-cloud-tencent-starters/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/polaris/pojo/PolarisServer.java
+++ /dev/null
@@ -1,109 +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.pojo;
-
-import com.google.common.base.Objects;
-import com.netflix.loadbalancer.Server;
-import com.tencent.polaris.api.pojo.Instance;
-import com.tencent.polaris.api.pojo.ServiceInstances;
-import org.apache.commons.lang.StringUtils;
-
-import java.util.Map;
-
-/**
- * Polaris implementation of {@link Server}
- *
- * @author Haotian Zhang
- */
-public class PolarisServer extends Server {
-
- private final ServiceInstances serviceInstances;
-
- private final Instance instance;
-
- private final MetaInfo metaInfo;
-
- public PolarisServer(ServiceInstances serviceInstances, Instance instance) {
- super(instance.getHost(), instance.getPort());
- if (StringUtils.equalsIgnoreCase(instance.getProtocol(), "https")) {
- setSchemea("https");
- } else {
- setSchemea("http");
- }
- this.serviceInstances = serviceInstances;
- this.instance = instance;
- this.metaInfo = new MetaInfo() {
- @Override
- public String getAppName() {
- return instance.getService();
- }
-
- @Override
- public String getServerGroup() {
- return null;
- }
-
- @Override
- public String getServiceIdForDiscovery() {
- return instance.getService();
- }
-
- @Override
- public String getInstanceId() {
- return instance.getId();
- }
- };
- }
-
- public Instance getInstance() {
- return instance;
- }
-
- @Override
- public MetaInfo getMetaInfo() {
- return metaInfo;
- }
-
- public Map getMetadata() {
- return instance.getMetadata();
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- if (!super.equals(o)) {
- return false;
- }
- PolarisServer that = (PolarisServer) o;
- return Objects.equal(instance, that.instance);
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(super.hashCode(), instance);
- }
-
- public ServiceInstances getServiceInstances() {
- return serviceInstances;
- }
-}
diff --git a/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/pom.xml b/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/pom.xml
index 1dd81df5c..2775d406e 100644
--- a/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/pom.xml
+++ b/spring-cloud-tencent-starters/spring-cloud-tencent-metadata/pom.xml
@@ -44,12 +44,6 @@
test
-
- org.springframework.cloud
- spring-cloud-starter-netflix-ribbon
- test
-
-
org.powermock
diff --git a/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/pom.xml b/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/pom.xml
index 261bd215c..888cd02b7 100644
--- a/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/pom.xml
+++ b/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/pom.xml
@@ -30,13 +30,6 @@
spring-cloud-starter-tencent-polaris-ratelimit
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-zuul
- true
-
-
org.springframework.cloud
spring-cloud-starter-gateway
diff --git a/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/config/PolarisGatewayAutoConfiguration.java b/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/config/PolarisGatewayAutoConfiguration.java
index cf8c17430..e548680e2 100644
--- a/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/config/PolarisGatewayAutoConfiguration.java
+++ b/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/config/PolarisGatewayAutoConfiguration.java
@@ -17,14 +17,9 @@
package com.tencent.cloud.polaris.gateway.config;
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.http.ZuulServlet;
import com.tencent.cloud.polaris.gateway.core.scg.filter.Metadata2HeaderScgFilter;
import com.tencent.cloud.polaris.gateway.core.scg.filter.MetadataFirstScgFilter;
import com.tencent.cloud.polaris.gateway.core.scg.filter.RateLimitScgFilter;
-import com.tencent.cloud.polaris.gateway.core.zuul.filter.Metadata2HeaderZuulFilter;
-import com.tencent.cloud.polaris.gateway.core.zuul.filter.MetadataFirstZuulFilter;
-import com.tencent.cloud.polaris.gateway.core.zuul.filter.RateLimitZuulFilter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Bean;
@@ -38,25 +33,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class PolarisGatewayAutoConfiguration {
- @Configuration(proxyBeanMethods = false)
- @ConditionalOnClass(ZuulServlet.class)
- static class PolarisGatewayZuulAutoConfiguration {
- @Bean
- public ZuulFilter metadataFirstZuulFilter() {
- return new MetadataFirstZuulFilter();
- }
-
- @Bean
- public ZuulFilter rateLimitZuulFilter() {
- return new RateLimitZuulFilter();
- }
- @Bean
- public ZuulFilter metadata2HeaderZuulFilter() {
- return new Metadata2HeaderZuulFilter();
- }
- }
-
- @Configuration(proxyBeanMethods = false)
+ @Configuration()
@ConditionalOnClass(GlobalFilter.class)
static class PolarisGatewayScgAutoConfiguration {
@Bean
diff --git a/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/core/zuul/filter/Metadata2HeaderZuulFilter.java b/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/core/zuul/filter/Metadata2HeaderZuulFilter.java
deleted file mode 100644
index 4b743f070..000000000
--- a/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/core/zuul/filter/Metadata2HeaderZuulFilter.java
+++ /dev/null
@@ -1,79 +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.gateway.core.zuul.filter;
-
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import com.tencent.cloud.metadata.constant.MetadataConstant;
-import com.tencent.cloud.metadata.context.MetadataContext;
-import com.tencent.cloud.metadata.context.MetadataContextHolder;
-import com.tencent.cloud.metadata.util.JacksonUtils;
-import org.springframework.util.CollectionUtils;
-
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.Map;
-
-import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.RIBBON_ROUTING_FILTER_ORDER;
-import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.ROUTE_TYPE;
-
-/**
- * Zuul filter used for writing metadata in HTTP request header.
- *
- * @author skyehtzhang
- */
-public class Metadata2HeaderZuulFilter extends ZuulFilter {
-
- @Override
- public String filterType() {
- return ROUTE_TYPE;
- }
-
- @Override
- public int filterOrder() {
- return RIBBON_ROUTING_FILTER_ORDER - 1;
- }
-
- @Override
- public boolean shouldFilter() {
- return true;
- }
-
- @Override
- public Object run() {
- // get request context
- RequestContext requestContext = RequestContext.getCurrentContext();
-
- // get metadata of current thread
- MetadataContext metadataContext = MetadataContextHolder.get();
-
- // add new metadata and cover old
- Map customMetadata = metadataContext.getAllTransitiveCustomMetadata();
- if (!CollectionUtils.isEmpty(customMetadata)) {
- String metadataStr = JacksonUtils.serialize2Json(customMetadata);
- try {
- requestContext.addZuulRequestHeader(MetadataConstant.HeaderName.CUSTOM_METADATA,
- URLEncoder.encode(metadataStr, "UTF-8"));
- } catch (UnsupportedEncodingException e) {
- requestContext.addZuulRequestHeader(MetadataConstant.HeaderName.CUSTOM_METADATA, metadataStr);
- }
- }
- return null;
- }
-}
diff --git a/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/core/zuul/filter/MetadataFirstZuulFilter.java b/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/core/zuul/filter/MetadataFirstZuulFilter.java
deleted file mode 100644
index 2d158d0e5..000000000
--- a/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/core/zuul/filter/MetadataFirstZuulFilter.java
+++ /dev/null
@@ -1,64 +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.gateway.core.zuul.filter;
-
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import com.tencent.cloud.metadata.constant.MetadataConstant;
-import com.tencent.cloud.metadata.context.MetadataContextHolder;
-
-import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_DECORATION_FILTER_ORDER;
-import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;
-import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.REQUEST_URI_KEY;
-import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SERVICE_ID_KEY;
-
-/**
- * Zuul filter used for setting peer info in context.
- *
- * @author Haotian Zhang
- */
-public class MetadataFirstZuulFilter extends ZuulFilter {
- @Override
- public String filterType() {
- return PRE_TYPE;
- }
-
- @Override
- public int filterOrder() {
- return PRE_DECORATION_FILTER_ORDER + 1;
- }
-
- @Override
- public boolean shouldFilter() {
- return true;
- }
-
- @Override
- public Object run() {
- // get request context
- RequestContext requestContext = RequestContext.getCurrentContext();
-
- // TODO 对端命名空间暂时与本地命名空间相同
- MetadataContextHolder.get().putSystemMetadata(MetadataConstant.SystemMetadataKey.PEER_NAMESPACE,
- MetadataContextHolder.get().getSystemMetadata(MetadataConstant.SystemMetadataKey.LOCAL_NAMESPACE));
- MetadataContextHolder.get().putSystemMetadata(MetadataConstant.SystemMetadataKey.PEER_SERVICE,
- (String) requestContext.get(SERVICE_ID_KEY));
- MetadataContextHolder.get().putSystemMetadata(MetadataConstant.SystemMetadataKey.PEER_PATH,
- (String) requestContext.get(REQUEST_URI_KEY));
- return null;
- }
-}
diff --git a/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/core/zuul/filter/RateLimitZuulFilter.java b/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/core/zuul/filter/RateLimitZuulFilter.java
deleted file mode 100644
index 89cf7896d..000000000
--- a/spring-cloud-tencent-starters/spring-cloud-tencent-polaris-gateway/src/main/java/com/tencent/cloud/polaris/gateway/core/zuul/filter/RateLimitZuulFilter.java
+++ /dev/null
@@ -1,99 +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.gateway.core.zuul.filter;
-
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import com.tencent.cloud.metadata.constant.MetadataConstant;
-import com.tencent.cloud.metadata.context.MetadataContextHolder;
-import com.tencent.cloud.polaris.ratelimit.utils.Consts;
-import com.tencent.cloud.polaris.ratelimit.utils.QuotaCheckUtils;
-import com.tencent.polaris.ratelimit.api.core.LimitAPI;
-import com.tencent.polaris.ratelimit.api.rpc.QuotaResponse;
-import com.tencent.polaris.ratelimit.api.rpc.QuotaResultCode;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;
-import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.RIBBON_ROUTING_FILTER_ORDER;
-import static org.springframework.http.HttpStatus.TOO_MANY_REQUESTS;
-
-/**
- * Zuul filter used for rate limit.
- *
- * @author Haotian Zhang
- */
-public class RateLimitZuulFilter extends ZuulFilter {
-
- private static final Logger LOG = LoggerFactory.getLogger(RateLimitZuulFilter.class);
-
- @Autowired(required = false)
- private LimitAPI limitAPI;
-
- @Override
- public String filterType() {
- return PRE_TYPE;
- }
-
- @Override
- public int filterOrder() {
- return RIBBON_ROUTING_FILTER_ORDER - 1;
- }
-
- @Override
- public boolean shouldFilter() {
- return limitAPI != null;
- }
-
- @Override
- public Object run() {
- // get request context
- RequestContext requestContext = RequestContext.getCurrentContext();
-
- String peerNamespace =
- MetadataContextHolder.get().getSystemMetadata(MetadataConstant.SystemMetadataKey.PEER_NAMESPACE);
- String peerService =
- MetadataContextHolder.get().getSystemMetadata(MetadataConstant.SystemMetadataKey.PEER_SERVICE);
- String peerPath = MetadataContextHolder.get().getSystemMetadata(MetadataConstant.SystemMetadataKey.PEER_PATH);
- Map labels = null;
- if (StringUtils.isNotBlank(peerPath)) {
- labels = new HashMap<>();
- labels.put("method", peerPath);
- }
-
- try {
- QuotaResponse quotaResponse = QuotaCheckUtils.getQuota(limitAPI, peerNamespace, peerService, 1, labels,
- null);
- if (quotaResponse.getCode() == QuotaResultCode.QuotaResultLimited) {
- requestContext.setSendZuulResponse(false);
- requestContext.setResponseStatusCode(TOO_MANY_REQUESTS.value());
- requestContext.getResponse().getWriter().write(Consts.QUOTA_LIMITED_INFO + quotaResponse.getInfo());
- }
- } catch (Throwable throwable) {
- //限流API调用出现异常,不应该影响业务流程的调用
- LOG.error("fail to rate limit with QuotaRequest[{}-{}-{}].", peerNamespace, peerService, peerPath,
- throwable);
- }
-
- return null;
- }
-}