From f6e7baaca816743f9df0d06dcd0443393b288b12 Mon Sep 17 00:00:00 2001
From: WindSearcher <1793521005@qq.com>
Date: Sat, 24 Aug 2024 23:56:45 +0800
Subject: [PATCH 01/26] =?UTF-8?q?=E5=8A=A8=E6=80=81=E6=B3=A8=E5=86=8C?=
=?UTF-8?q?=E4=B8=AD=E5=BF=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../model/entity/NamespacePluginRelDO.java | 2 +-
.../constant/DynamicRegisterConstants.java | 49 +++++++++++++++++
.../shenyu-examples-springcloud/pom.xml | 12 ++---
.../cache/CommonPluginDataSubscriber.java | 2 +-
.../shenyu-plugin-springcloud/pom.xml | 5 ++
.../cache/ServiceInstanceCache.java | 7 +--
.../handler/SpringCloudPluginDataHandler.java | 53 +++++++++++++++----
.../SpringCloudHeartBeatListener.java | 21 ++++----
.../ShenyuSpringCloudServiceChooser.java | 21 ++++----
.../springcloud/SpringCloudPluginTest.java | 14 ++---
.../SpringCloudPluginDataHandlerTest.java | 6 +--
.../ShenyuSpringCloudServiceChooserTest.java | 46 ++++++++--------
.../registry/api/config/RegisterConfig.java | 48 +++++++++++++++++
.../registry/api/entity/InstanceEntity.java | 36 ++++++++++++-
.../ApolloInstanceRegisterRepository.java | 13 ++++-
.../ConsulInstanceRegisterRepository.java | 17 ++++++
...enyuInstanceRegisterRepositoryFactory.java | 13 +++++
.../etcd/EtcdInstanceRegisterRepository.java | 13 ++++-
.../EurekaInstanceRegisterRepository.java | 14 ++++-
.../NacosInstanceRegisterRepository.java | 17 ++++++
.../PolarisInstanceRegisterRepository.java | 3 ++
.../ZookeeperInstanceRegisterRepository.java | 11 +++-
.../SpringCloudPluginConfiguration.java | 32 +++++++----
23 files changed, 368 insertions(+), 87 deletions(-)
create mode 100644 shenyu-common/src/main/java/org/apache/shenyu/common/constant/DynamicRegisterConstants.java
diff --git a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/NamespacePluginRelDO.java b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/NamespacePluginRelDO.java
index aa144faf8545..49f570dd53f9 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/NamespacePluginRelDO.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/entity/NamespacePluginRelDO.java
@@ -173,7 +173,7 @@ public static NamespacePluginRelDO buildPluginNsRelDO(final NamespacePluginDTO n
return Optional.ofNullable(namespacePluginDTO).map(item -> {
Timestamp currentTime = new Timestamp(System.currentTimeMillis());
NamespacePluginRelDO namespacePluginRelDO = NamespacePluginRelDO.builder()
- .config(item.getConfig())
+ .config(item.getConfig() == null ? "" : item.getConfig())
.enabled(item.getEnabled())
.sort(item.getSort())
.namespaceId(item.getNamespaceId())
diff --git a/shenyu-common/src/main/java/org/apache/shenyu/common/constant/DynamicRegisterConstants.java b/shenyu-common/src/main/java/org/apache/shenyu/common/constant/DynamicRegisterConstants.java
new file mode 100644
index 000000000000..753743e484f3
--- /dev/null
+++ b/shenyu-common/src/main/java/org/apache/shenyu/common/constant/DynamicRegisterConstants.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 org.apache.shenyu.common.constant;
+
+/**
+ * DynamicRegisterConstants.
+ */
+public class DynamicRegisterConstants {
+
+ /**
+ * The constant REGISTER_TYPE.
+ */
+ public static final String REGISTER_TYPE = "registerType";
+
+ public static final String NACOS = "nacos";
+
+ public static final String ZOOKEEPER = "zookeeper";
+
+ public static final String ETCD = "etcd";
+
+ public static final String EUREKA = "eureka";
+
+ public static final String SERVER_LISTS = "serverLists";
+
+ public static final String NAMESPACE = "namespace";
+
+ public static final String USERNAME = "username";
+
+ public static final String PASSWORD = "password";
+
+ public static final String ACCESS_KEY = "accessKey";
+
+ public static final String SECRET_KEY = "secretKey";
+}
diff --git a/shenyu-examples/shenyu-examples-springcloud/pom.xml b/shenyu-examples/shenyu-examples-springcloud/pom.xml
index e35ab1cc8e76..4ee2ff936974 100644
--- a/shenyu-examples/shenyu-examples-springcloud/pom.xml
+++ b/shenyu-examples/shenyu-examples-springcloud/pom.xml
@@ -29,7 +29,7 @@
4.1.2
- 2021.0.1.0
+ 2022.0.0.0
4.1.2
@@ -72,11 +72,11 @@
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
- ${eureka-client.version}
-
+
+
+
+
+
org.springframework.boot
diff --git a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriber.java b/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriber.java
index c531b93a9b63..4534946cb81f 100644
--- a/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriber.java
+++ b/shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/CommonPluginDataSubscriber.java
@@ -214,10 +214,10 @@ private void updateCacheData(@NonNull final T data) {
if (data instanceof PluginData) {
PluginData pluginData = (PluginData) data;
final PluginData oldPluginData = BaseDataCache.getInstance().obtainPluginData(pluginData.getName());
- BaseDataCache.getInstance().cachePluginData(pluginData);
Optional.ofNullable(handlerMap.get(pluginData.getName()))
.ifPresent(handler -> handler.handlerPlugin(pluginData));
+ BaseDataCache.getInstance().cachePluginData(pluginData);
// update enabled plugins
PluginHandlerEventEnum state = Boolean.TRUE.equals(pluginData.getEnabled())
? PluginHandlerEventEnum.ENABLED : PluginHandlerEventEnum.DISABLED;
diff --git a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/pom.xml b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/pom.xml
index 7326b329c235..38ec0d10f3f4 100644
--- a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/pom.xml
+++ b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/pom.xml
@@ -48,5 +48,10 @@
shenyu-loadbalancer
${project.version}
+
+ org.apache.shenyu
+ shenyu-registry-core
+ ${project.version}
+
diff --git a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/cache/ServiceInstanceCache.java b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/cache/ServiceInstanceCache.java
index 4fb502e331a7..653fe94c35c3 100644
--- a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/cache/ServiceInstanceCache.java
+++ b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/cache/ServiceInstanceCache.java
@@ -19,6 +19,7 @@
import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;
+import org.apache.shenyu.registry.api.entity.InstanceEntity;
import org.springframework.cloud.client.ServiceInstance;
import java.util.Collections;
@@ -31,7 +32,7 @@
*/
public class ServiceInstanceCache {
- private static final Map> SERVICE_INSTANCE_MAP = Maps.newConcurrentMap();
+ private static final Map> SERVICE_INSTANCE_MAP = Maps.newConcurrentMap();
/**
* Cache service instance.
@@ -39,7 +40,7 @@ public class ServiceInstanceCache {
* @param serviceId service id
* @param serviceInstances service instance list
*/
- public static void cacheServiceInstance(final String serviceId, final List serviceInstances) {
+ public static void cacheServiceInstance(final String serviceId, final List serviceInstances) {
if (StringUtils.isNotBlank(serviceId)) {
SERVICE_INSTANCE_MAP.put(serviceId, Optional.ofNullable(serviceInstances).orElse(Collections.emptyList()));
}
@@ -50,7 +51,7 @@ public static void cacheServiceInstance(final String serviceId, final List getServiceInstance(final String serviceId) {
+ public static List getServiceInstance(final String serviceId) {
if (StringUtils.isBlank(serviceId)) {
return Collections.emptyList();
}
diff --git a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/handler/SpringCloudPluginDataHandler.java b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/handler/SpringCloudPluginDataHandler.java
index f2cd69e3e84d..d2a67808b9e9 100644
--- a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/handler/SpringCloudPluginDataHandler.java
+++ b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/handler/SpringCloudPluginDataHandler.java
@@ -18,8 +18,10 @@
package org.apache.shenyu.plugin.springcloud.handler;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.shenyu.common.config.ShenyuConfig.SpringCloudCacheConfig;
import org.apache.shenyu.common.constant.Constants;
+import org.apache.shenyu.common.dto.PluginData;
import org.apache.shenyu.common.dto.RuleData;
import org.apache.shenyu.common.dto.SelectorData;
import org.apache.shenyu.common.dto.convert.rule.impl.SpringCloudRuleHandle;
@@ -29,13 +31,16 @@
import org.apache.shenyu.common.utils.GsonUtils;
import org.apache.shenyu.loadbalancer.cache.UpstreamCacheManager;
import org.apache.shenyu.loadbalancer.entity.Upstream;
+import org.apache.shenyu.plugin.base.cache.BaseDataCache;
import org.apache.shenyu.plugin.base.cache.CommonHandleCache;
import org.apache.shenyu.plugin.base.handler.PluginDataHandler;
import org.apache.shenyu.plugin.base.utils.BeanHolder;
import org.apache.shenyu.plugin.base.utils.CacheKeyUtils;
import org.apache.shenyu.plugin.springcloud.cache.ServiceInstanceCache;
-import org.springframework.cloud.client.ServiceInstance;
-import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository;
+import org.apache.shenyu.registry.api.config.RegisterConfig;
+import org.apache.shenyu.registry.api.entity.InstanceEntity;
+import org.apache.shenyu.registry.core.ShenyuInstanceRegisterRepositoryFactory;
import java.util.List;
import java.util.Optional;
@@ -50,16 +55,44 @@ public class SpringCloudPluginDataHandler implements PluginDataHandler {
public static final Supplier> SELECTOR_CACHED = new BeanHolder<>(CommonHandleCache::new);
public static final Supplier> RULE_CACHED = new BeanHolder<>(CommonHandleCache::new);
-
- private final DiscoveryClient discoveryClient;
-
+
+ private ShenyuInstanceRegisterRepository repository;
+
private final SpringCloudCacheConfig springCloudCacheConfig;
-
- public SpringCloudPluginDataHandler(final DiscoveryClient discoveryClient, final SpringCloudCacheConfig springCloudCacheConfig) {
- this.discoveryClient = discoveryClient;
+
+ public SpringCloudPluginDataHandler(final RegisterConfig config, final SpringCloudCacheConfig springCloudCacheConfig) {
+ this.repository = ShenyuInstanceRegisterRepositoryFactory.newAndInitInstance(config);
this.springCloudCacheConfig = springCloudCacheConfig;
}
-
+
+ @Override
+ public void handlerPlugin(final PluginData pluginData) {
+ if (pluginData == null) {
+ return;
+ }
+ if (!pluginData.getEnabled()) {
+ return;
+ }
+
+ PluginData oldPluginData = BaseDataCache.getInstance().obtainPluginData(pluginData.getName());
+ String newConfig = pluginData.getConfig();
+ String oldConfig = oldPluginData != null ? oldPluginData.getConfig() : "";
+ RegisterConfig newRegisterConfig = GsonUtils.getInstance().fromJson(newConfig, RegisterConfig.class);
+ if (newRegisterConfig == null) {
+ return;
+ }
+ RegisterConfig oldRegisterConfig = null;
+ if (StringUtils.isNotBlank(oldConfig)) {
+ oldRegisterConfig = GsonUtils.getInstance().fromJson(oldConfig, RegisterConfig.class);
+ }
+
+ if (!newRegisterConfig.equals(oldRegisterConfig)) {
+ RegisterConfig refreshRegisterConfig = GsonUtils.getInstance().fromJson(newConfig, RegisterConfig.class);
+ this.repository.close();
+ this.repository = ShenyuInstanceRegisterRepositoryFactory.reNewAndInitInstance(refreshRegisterConfig);
+ }
+ }
+
@Override
public void handlerSelector(final SelectorData selectorData) {
SpringCloudSelectorHandle springCloudSelectorHandle = GsonUtils.getInstance().fromJson(selectorData.getHandle(), SpringCloudSelectorHandle.class);
@@ -69,7 +102,7 @@ public void handlerSelector(final SelectorData selectorData) {
return;
}
if (springCloudCacheConfig.getEnabled()) {
- List serviceInstances = discoveryClient.getInstances(springCloudSelectorHandle.getServiceId());
+ List serviceInstances = repository.selectInstances(springCloudSelectorHandle.getServiceId());
ServiceInstanceCache.cacheServiceInstance(springCloudSelectorHandle.getServiceId(), serviceInstances);
}
UpstreamCacheManager.getInstance().submit(selectorData.getId(), convertUpstreamList(springCloudSelectorHandle.getDivideUpstreams()));
diff --git a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/listener/SpringCloudHeartBeatListener.java b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/listener/SpringCloudHeartBeatListener.java
index 551521af5c03..1f2587385c2d 100644
--- a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/listener/SpringCloudHeartBeatListener.java
+++ b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/listener/SpringCloudHeartBeatListener.java
@@ -22,11 +22,14 @@
import org.apache.shenyu.common.dto.convert.selector.SpringCloudSelectorHandle;
import org.apache.shenyu.common.utils.LogUtils;
import org.apache.shenyu.plugin.springcloud.cache.ServiceInstanceCache;
+
import static org.apache.shenyu.plugin.springcloud.handler.SpringCloudPluginDataHandler.SELECTOR_CACHED;
+import org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository;
+import org.apache.shenyu.registry.api.config.RegisterConfig;
+import org.apache.shenyu.registry.api.entity.InstanceEntity;
+import org.apache.shenyu.registry.core.ShenyuInstanceRegisterRepositoryFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.cloud.client.ServiceInstance;
-import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.event.HeartbeatEvent;
import org.springframework.context.ApplicationListener;
@@ -39,13 +42,13 @@
public class SpringCloudHeartBeatListener implements ApplicationListener {
private static final Logger LOG = LoggerFactory.getLogger(SpringCloudHeartBeatListener.class);
-
- private final DiscoveryClient discoveryClient;
-
+
+ private final ShenyuInstanceRegisterRepository repository;
+
private final SpringCloudCacheConfig cacheConfig;
-
- public SpringCloudHeartBeatListener(final DiscoveryClient discoveryClient, final SpringCloudCacheConfig cacheConfig) {
- this.discoveryClient = discoveryClient;
+
+ public SpringCloudHeartBeatListener(final RegisterConfig config, final SpringCloudCacheConfig cacheConfig) {
+ this.repository = ShenyuInstanceRegisterRepositoryFactory.newAndInitInstance(config);
this.cacheConfig = cacheConfig;
}
@@ -61,7 +64,7 @@ public void onApplicationEvent(final HeartbeatEvent event) {
}
map.forEach((key, value) -> {
String serviceId = value.getServiceId();
- List serviceInstanceList = discoveryClient.getInstances(serviceId);
+ List serviceInstanceList = repository.selectInstances(serviceId);
ServiceInstanceCache.cacheServiceInstance(serviceId, serviceInstanceList);
});
}
diff --git a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/loadbalance/ShenyuSpringCloudServiceChooser.java b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/loadbalance/ShenyuSpringCloudServiceChooser.java
index 80f1993cbb57..63b9d4b87992 100644
--- a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/loadbalance/ShenyuSpringCloudServiceChooser.java
+++ b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/main/java/org/apache/shenyu/plugin/springcloud/loadbalance/ShenyuSpringCloudServiceChooser.java
@@ -26,10 +26,13 @@
import org.apache.shenyu.loadbalancer.factory.LoadBalancerFactory;
import org.apache.shenyu.plugin.springcloud.cache.ServiceInstanceCache;
import org.apache.shenyu.plugin.springcloud.handler.SpringCloudPluginDataHandler;
+import org.apache.shenyu.registry.api.ShenyuInstanceRegisterRepository;
+import org.apache.shenyu.registry.api.config.RegisterConfig;
+import org.apache.shenyu.registry.api.entity.InstanceEntity;
+import org.apache.shenyu.registry.core.ShenyuInstanceRegisterRepositoryFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.client.ServiceInstance;
-import org.springframework.cloud.client.discovery.DiscoveryClient;
import java.util.ArrayList;
import java.util.Collections;
@@ -45,10 +48,10 @@ public final class ShenyuSpringCloudServiceChooser {
private static final Logger LOG = LoggerFactory.getLogger(ShenyuSpringCloudServiceChooser.class);
- private final DiscoveryClient discoveryClient;
+ private ShenyuInstanceRegisterRepository repository;
- public ShenyuSpringCloudServiceChooser(final DiscoveryClient discoveryClient) {
- this.discoveryClient = discoveryClient;
+ public ShenyuSpringCloudServiceChooser(final RegisterConfig config) {
+ this.repository = ShenyuInstanceRegisterRepositoryFactory.newAndInitInstance(config);
}
/**
@@ -63,7 +66,7 @@ public ShenyuSpringCloudServiceChooser(final DiscoveryClient discoveryClient) {
public Upstream choose(final String serviceId, final String selectorId,
final String ip, final String loadbalancer) {
// load service instance by serviceId
- List available = this.getServiceInstance(serviceId);
+ List available = this.getServiceInstance(serviceId);
if (CollectionUtils.isEmpty(available)) {
LOG.info("choose return 1");
return null;
@@ -81,7 +84,7 @@ public Upstream choose(final String serviceId, final String selectorId,
}
// select server from available to choose
final List choose = new ArrayList<>(available.size());
- for (ServiceInstance serviceInstance : available) {
+ for (InstanceEntity serviceInstance : available) {
divideUpstreams.stream()
.filter(Upstream::isStatus)
.filter(upstream -> Objects.equals(upstream.getUrl(), serviceInstance.getUri().getRawAuthority()))
@@ -121,9 +124,9 @@ private Upstream doSelect(final List upstreamList, final String loadba
* @param serviceId serviceId
* @return {@linkplain ServiceInstance}
*/
- private List getServiceInstance(final String serviceId) {
+ private List getServiceInstance(final String serviceId) {
if (CollectionUtils.isEmpty(ServiceInstanceCache.getServiceInstance(serviceId))) {
- List instances = discoveryClient.getInstances(serviceId);
+ List instances = repository.selectInstances(serviceId);
LOG.info("getServiceInstance: {}", JsonUtils.toJson(instances));
return Optional.ofNullable(instances).orElse(Collections.emptyList());
}
@@ -138,7 +141,7 @@ private List getServiceInstance(final String serviceId) {
* @return Upstream List
*/
private List buildUpstream(final String serviceId) {
- List serviceInstanceList = this.getServiceInstance(serviceId);
+ List serviceInstanceList = this.getServiceInstance(serviceId);
if (CollectionUtils.isEmpty(serviceInstanceList)) {
return Collections.emptyList();
}
diff --git a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/SpringCloudPluginTest.java b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/SpringCloudPluginTest.java
index da6fc31513d4..c26d06bc728b 100644
--- a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/SpringCloudPluginTest.java
+++ b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/SpringCloudPluginTest.java
@@ -112,13 +112,13 @@ public void setUp() {
defaultServiceInstance.setPort(8080);
defaultServiceInstance.setHost("localhost");
serviceInstanceList.add(defaultServiceInstance);
- SimpleDiscoveryProperties simpleDiscoveryProperties = new SimpleDiscoveryProperties();
- Map> serviceInstanceMap = new HashMap<>();
- serviceInstanceMap.put(defaultServiceInstance.getInstanceId(), serviceInstanceList);
- simpleDiscoveryProperties.setInstances(serviceInstanceMap);
- SimpleDiscoveryClient discoveryClient = new SimpleDiscoveryClient(simpleDiscoveryProperties);
- ShenyuSpringCloudServiceChooser loadBalancerClient = new ShenyuSpringCloudServiceChooser(discoveryClient);
- springCloudPlugin = new SpringCloudPlugin(loadBalancerClient);
+// SimpleDiscoveryProperties simpleDiscoveryProperties = new SimpleDiscoveryProperties();
+// Map> serviceInstanceMap = new HashMap<>();
+// serviceInstanceMap.put(defaultServiceInstance.getInstanceId(), serviceInstanceList);
+// simpleDiscoveryProperties.setInstances(serviceInstanceMap);
+// SimpleDiscoveryClient discoveryClient = new SimpleDiscoveryClient(simpleDiscoveryProperties);
+// ShenyuSpringCloudServiceChooser loadBalancerClient = new ShenyuSpringCloudServiceChooser(discoveryClient);
+// springCloudPlugin = new SpringCloudPlugin(loadBalancerClient);
}
@Test
diff --git a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/handler/SpringCloudPluginDataHandlerTest.java b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/handler/SpringCloudPluginDataHandlerTest.java
index 3056e8812631..3be67ee20a39 100644
--- a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/handler/SpringCloudPluginDataHandlerTest.java
+++ b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/handler/SpringCloudPluginDataHandlerTest.java
@@ -60,9 +60,9 @@ public final class SpringCloudPluginDataHandlerTest {
public void setUp() {
this.mockSpringCloudConfig();
SimpleDiscoveryProperties simpleDiscoveryProperties = new SimpleDiscoveryProperties();
- SimpleDiscoveryClient discoveryClient = new SimpleDiscoveryClient(simpleDiscoveryProperties);
- SpringCloudCacheConfig springCloudCacheConfig = SpringBeanUtils.getInstance().getBean(SpringCloudCacheConfig.class);
- this.springCloudPluginDataHandler = new SpringCloudPluginDataHandler(discoveryClient, springCloudCacheConfig);
+// SimpleDiscoveryClient discoveryClient = new SimpleDiscoveryClient(simpleDiscoveryProperties);
+// SpringCloudCacheConfig springCloudCacheConfig = SpringBeanUtils.getInstance().getBean(SpringCloudCacheConfig.class);
+// this.springCloudPluginDataHandler = new SpringCloudPluginDataHandler(discoveryClient, springCloudCacheConfig);
this.selectorData = new SelectorData();
}
diff --git a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/loadbalance/ShenyuSpringCloudServiceChooserTest.java b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/loadbalance/ShenyuSpringCloudServiceChooserTest.java
index 2d2f90864435..8dd5244a53ff 100644
--- a/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/loadbalance/ShenyuSpringCloudServiceChooserTest.java
+++ b/shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-springcloud/src/test/java/org/apache/shenyu/plugin/springcloud/loadbalance/ShenyuSpringCloudServiceChooserTest.java
@@ -71,10 +71,10 @@ public void setup() {
Map> serviceInstanceMap = new HashMap<>();
serviceInstanceMap.put(defaultServiceInstance.getInstanceId(), serviceInstanceList);
simpleDiscoveryProperties.setInstances(serviceInstanceMap);
- SimpleDiscoveryClient discoveryClient = new SimpleDiscoveryClient(simpleDiscoveryProperties);
- serviceChooser = new ShenyuSpringCloudServiceChooser(discoveryClient);
- SpringCloudCacheConfig springCloudCacheConfig = SpringBeanUtils.getInstance().getBean(SpringCloudCacheConfig.class);
- springCloudPluginDataHandler = new SpringCloudPluginDataHandler(discoveryClient, springCloudCacheConfig);
+// SimpleDiscoveryClient discoveryClient = new SimpleDiscoveryClient(simpleDiscoveryProperties);
+// serviceChooser = new ShenyuSpringCloudServiceChooser(discoveryClient);
+// SpringCloudCacheConfig springCloudCacheConfig = SpringBeanUtils.getInstance().getBean(SpringCloudCacheConfig.class);
+// springCloudPluginDataHandler = new SpringCloudPluginDataHandler(discoveryClient, springCloudCacheConfig);
}
@Test
@@ -142,25 +142,25 @@ public void testLoadBalancer() {
Map> serviceInstanceMap = new HashMap<>();
serviceInstanceMap.put(defaultServiceInstance.getInstanceId(), serviceInstances);
simpleDiscoveryProperties.setInstances(serviceInstanceMap);
- final SimpleDiscoveryClient simpleDiscoveryClient = new SimpleDiscoveryClient(simpleDiscoveryProperties);
- final ShenyuSpringCloudServiceChooser shenyuServiceChoose = new ShenyuSpringCloudServiceChooser(simpleDiscoveryClient);
-
- final String ip = "0.0.0.0";
- final String selectorId = "1";
- final String loadbalancer = "roundRobin";
- final SpringCloudSelectorHandle springCloudSelectorHandle = SpringCloudSelectorHandle.builder()
- .serviceId("serviceId")
- .gray(false)
- .build();
- final SelectorData selectorData = SelectorData.builder()
- .handle(GsonUtils.getInstance().toJson(springCloudSelectorHandle))
- .id("1")
- .build();
- springCloudPluginDataHandler.handlerSelector(selectorData);
- Upstream upstream1 = shenyuServiceChoose.choose("serviceId", selectorId, ip, loadbalancer);
- Upstream upstream2 = shenyuServiceChoose.choose("serviceId", selectorId, ip, loadbalancer);
- // if roundRobin, upstream1 not equals upstream2
- Assertions.assertNotEquals(upstream1, upstream2);
+// final SimpleDiscoveryClient simpleDiscoveryClient = new SimpleDiscoveryClient(simpleDiscoveryProperties);
+// final ShenyuSpringCloudServiceChooser shenyuServiceChoose = new ShenyuSpringCloudServiceChooser(simpleDiscoveryClient);
+//
+// final String ip = "0.0.0.0";
+// final String selectorId = "1";
+// final String loadbalancer = "roundRobin";
+// final SpringCloudSelectorHandle springCloudSelectorHandle = SpringCloudSelectorHandle.builder()
+// .serviceId("serviceId")
+// .gray(false)
+// .build();
+// final SelectorData selectorData = SelectorData.builder()
+// .handle(GsonUtils.getInstance().toJson(springCloudSelectorHandle))
+// .id("1")
+// .build();
+// springCloudPluginDataHandler.handlerSelector(selectorData);
+// Upstream upstream1 = shenyuServiceChoose.choose("serviceId", selectorId, ip, loadbalancer);
+// Upstream upstream2 = shenyuServiceChoose.choose("serviceId", selectorId, ip, loadbalancer);
+// // if roundRobin, upstream1 not equals upstream2
+// Assertions.assertNotEquals(upstream1, upstream2);
}
private void mockSpringCloudConfig() {
diff --git a/shenyu-registry/shenyu-registry-api/src/main/java/org/apache/shenyu/registry/api/config/RegisterConfig.java b/shenyu-registry/shenyu-registry-api/src/main/java/org/apache/shenyu/registry/api/config/RegisterConfig.java
index 619cad1bec99..37d255bc4d54 100644
--- a/shenyu-registry/shenyu-registry-api/src/main/java/org/apache/shenyu/registry/api/config/RegisterConfig.java
+++ b/shenyu-registry/shenyu-registry-api/src/main/java/org/apache/shenyu/registry/api/config/RegisterConfig.java
@@ -17,6 +17,7 @@
package org.apache.shenyu.registry.api.config;
+import java.util.Map;
import java.util.Properties;
/**
@@ -123,4 +124,51 @@ public boolean getEnabled() {
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ RegisterConfig registerConfig = (RegisterConfig) obj;
+ if (!this.getRegisterType().equals(registerConfig.getRegisterType())) {
+ return false;
+ }
+ if (!this.getServerLists().equals(registerConfig.getServerLists())) {
+ return false;
+ }
+ if (this.getProps() == null && registerConfig.getProps() == null) {
+ return true;
+ }
+ if (this.getProps() == null || registerConfig.getProps() == null) {
+ return false;
+ }
+ if (this.getProps().entrySet().size() != registerConfig.getProps().entrySet().size()) {
+ return false;
+ }
+ for (Map.Entry