Commit 2f312e3e by Nepxion

修复规则Bug

parent 4093b4b5
...@@ -69,7 +69,7 @@ public class VersionFilterDiscoveryListener extends AbstractDiscoveryListener { ...@@ -69,7 +69,7 @@ public class VersionFilterDiscoveryListener extends AbstractDiscoveryListener {
} }
// 当前版本的消费端所能调用提供端的版本号列表 // 当前版本的消费端所能调用提供端的版本号列表
List<String> allFilterValueList = new ArrayList<String>(); List<String> allNoFilterValueList = null;
for (DiscoveryServiceEntity serviceEntity : serviceEntityList) { for (DiscoveryServiceEntity serviceEntity : serviceEntityList) {
String providerServiceName = serviceEntity.getProviderServiceName(); String providerServiceName = serviceEntity.getProviderServiceName();
if (StringUtils.equals(providerServiceName, providerServiceId)) { if (StringUtils.equals(providerServiceName, providerServiceId)) {
...@@ -77,34 +77,46 @@ public class VersionFilterDiscoveryListener extends AbstractDiscoveryListener { ...@@ -77,34 +77,46 @@ public class VersionFilterDiscoveryListener extends AbstractDiscoveryListener {
List<String> providerVersionValueList = serviceEntity.getProviderVersionValueList(); List<String> providerVersionValueList = serviceEntity.getProviderVersionValueList();
// 判断consumer-version-value值是否包含当前消费端的版本号 // 判断consumer-version-value值是否包含当前消费端的版本号
// 如果consumerVersionValueList为空,表示消费端版本列表未指定,那么任意消费端版本可以访问指定版本提供端版本
if (CollectionUtils.isNotEmpty(consumerVersionValueList)) { if (CollectionUtils.isNotEmpty(consumerVersionValueList)) {
if (consumerVersionValueList.contains(consumerServiceVersion)) { if (consumerVersionValueList.contains(consumerServiceVersion)) {
if (allNoFilterValueList == null) {
allNoFilterValueList = new ArrayList<String>();
}
if (CollectionUtils.isNotEmpty(providerVersionValueList)) { if (CollectionUtils.isNotEmpty(providerVersionValueList)) {
allFilterValueList.addAll(providerVersionValueList); allNoFilterValueList.addAll(providerVersionValueList);
} }
} }
} else { } else {
if (allNoFilterValueList == null) {
allNoFilterValueList = new ArrayList<String>();
}
if (CollectionUtils.isNotEmpty(providerVersionValueList)) { if (CollectionUtils.isNotEmpty(providerVersionValueList)) {
allFilterValueList.addAll(providerVersionValueList); allNoFilterValueList.addAll(providerVersionValueList);
} }
} }
} }
} }
// 未找到相应的版本定义或者未定义 if (allNoFilterValueList != null) {
if (CollectionUtils.isEmpty(allFilterValueList)) { // 当allNoFilterValueList为空列表,意味着版本对应关系未做任何定义(即所有的providerVersionValueList为空),不需要执行过滤,直接返回
if (allNoFilterValueList.isEmpty()) {
return; return;
} } else {
Iterator<ServiceInstance> iterator = instances.iterator(); Iterator<ServiceInstance> iterator = instances.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
ServiceInstance serviceInstance = iterator.next(); ServiceInstance serviceInstance = iterator.next();
String metaDataVersion = serviceInstance.getMetadata().get(PluginConstant.VERSION); String metaDataVersion = serviceInstance.getMetadata().get(PluginConstant.VERSION);
if (!allFilterValueList.contains(metaDataVersion)) { if (!allNoFilterValueList.contains(metaDataVersion)) {
iterator.remove(); iterator.remove();
} }
} }
} }
} else {
// 当allNoFilterValueList为null, 意味着定义的版本关系都不匹配,直接清空所有实例
instances.clear();
}
}
@Override @Override
public void onGetServices(List<String> services) { public void onGetServices(List<String> services) {
......
...@@ -69,7 +69,7 @@ public class VersionFilterLoadBalanceListener extends AbstractLoadBalanceListene ...@@ -69,7 +69,7 @@ public class VersionFilterLoadBalanceListener extends AbstractLoadBalanceListene
} }
// 当前版本的消费端所能调用提供端的版本号列表 // 当前版本的消费端所能调用提供端的版本号列表
List<String> allFilterValueList = new ArrayList<String>(); List<String> allNoFilterValueList = null;
for (DiscoveryServiceEntity serviceEntity : serviceEntityList) { for (DiscoveryServiceEntity serviceEntity : serviceEntityList) {
String providerServiceName = serviceEntity.getProviderServiceName(); String providerServiceName = serviceEntity.getProviderServiceName();
if (StringUtils.equals(providerServiceName, providerServiceId)) { if (StringUtils.equals(providerServiceName, providerServiceId)) {
...@@ -77,32 +77,44 @@ public class VersionFilterLoadBalanceListener extends AbstractLoadBalanceListene ...@@ -77,32 +77,44 @@ public class VersionFilterLoadBalanceListener extends AbstractLoadBalanceListene
List<String> providerVersionValueList = serviceEntity.getProviderVersionValueList(); List<String> providerVersionValueList = serviceEntity.getProviderVersionValueList();
// 判断consumer-version-value值是否包含当前消费端的版本号 // 判断consumer-version-value值是否包含当前消费端的版本号
// 如果consumerVersionValueList为空,表示消费端版本列表未指定,那么任意消费端版本可以访问指定版本提供端版本
if (CollectionUtils.isNotEmpty(consumerVersionValueList)) { if (CollectionUtils.isNotEmpty(consumerVersionValueList)) {
if (consumerVersionValueList.contains(consumerServiceVersion)) { if (consumerVersionValueList.contains(consumerServiceVersion)) {
if (allNoFilterValueList == null) {
allNoFilterValueList = new ArrayList<String>();
}
if (CollectionUtils.isNotEmpty(providerVersionValueList)) { if (CollectionUtils.isNotEmpty(providerVersionValueList)) {
allFilterValueList.addAll(providerVersionValueList); allNoFilterValueList.addAll(providerVersionValueList);
} }
} }
} else { } else {
if (allNoFilterValueList == null) {
allNoFilterValueList = new ArrayList<String>();
}
if (CollectionUtils.isNotEmpty(providerVersionValueList)) { if (CollectionUtils.isNotEmpty(providerVersionValueList)) {
allFilterValueList.addAll(providerVersionValueList); allNoFilterValueList.addAll(providerVersionValueList);
} }
} }
} }
} }
// 未找到相应的版本定义或者未定义 if (allNoFilterValueList != null) {
if (CollectionUtils.isEmpty(allFilterValueList)) { // 当allNoFilterValueList为空列表,意味着版本对应关系未做任何定义(即所有的providerVersionValueList为空),不需要执行过滤,直接返回
if (allNoFilterValueList.isEmpty()) {
return; return;
} } else {
Iterator<? extends Server> iterator = servers.iterator(); Iterator<? extends Server> iterator = servers.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
Server server = iterator.next(); Server server = iterator.next();
String metaDataVersion = pluginAdapter.getServerVersion(server); String metaDataVersion = pluginAdapter.getServerVersion(server);
if (!allFilterValueList.contains(metaDataVersion)) { if (!allNoFilterValueList.contains(metaDataVersion)) {
iterator.remove(); iterator.remove();
} }
} }
} }
} else {
// 当allNoFilterValueList为null, 意味着定义的版本关系都不匹配,直接清空所有实例
servers.clear();
}
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment