From 5f53b1da290e1a6a30dded08dc8986a532bb2b6a Mon Sep 17 00:00:00 2001 From: lbw Date: Thu, 1 Jul 2021 10:18:19 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20Fixing=20a=20bug.=20#2901=20=E7=BD=91?= =?UTF-8?q?=E5=85=B3=E7=81=B0=E5=BA=A6=E8=B7=AF=E7=94=B1=20version=20?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E8=BD=AE=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gateway/rule/VersionGrayLoadBalancer.java | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/VersionGrayLoadBalancer.java b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/VersionGrayLoadBalancer.java index 6beb2fb9f..e441c5b06 100644 --- a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/VersionGrayLoadBalancer.java +++ b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/VersionGrayLoadBalancer.java @@ -22,7 +22,7 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.pig4cloud.pigx.common.core.constant.CommonConstants; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; @@ -30,7 +30,7 @@ import org.springframework.cloud.gateway.support.NotFoundException; import org.springframework.http.server.reactive.ServerHttpRequest; import java.util.List; -import java.util.Map; +import java.util.stream.Collectors; /** * @author lengleng @@ -39,15 +39,16 @@ import java.util.Map; * 基于客户端版本号灰度路由 */ @Slf4j -@AllArgsConstructor +@RequiredArgsConstructor public class VersionGrayLoadBalancer implements GrayLoadBalancer { - private DiscoveryClient discoveryClient; + private final DiscoveryClient discoveryClient; /** * 根据serviceId 筛选可用服务 + * * @param serviceId 服务ID - * @param request 当前请求 + * @param request 当前请求 * @return */ @Override @@ -67,15 +68,17 @@ public class VersionGrayLoadBalancer implements GrayLoadBalancer { } // 遍历可以实例元数据,若匹配则返回此实例 - for (ServiceInstance instance : instances) { - Map metadata = instance.getMetadata(); - String targetVersion = MapUtil.getStr(metadata, CommonConstants.VERSION); - if (reqVersion.equalsIgnoreCase(targetVersion)) { - log.debug("gray requst match success :{} {}", reqVersion, instance); - return instance; - } + List availableList = instances.stream() + .filter(instance -> reqVersion + .equalsIgnoreCase(MapUtil.getStr(instance.getMetadata(), CommonConstants.VERSION))) + .collect(Collectors.toList()); + + if (CollUtil.isEmpty(availableList)) { + return instances.get(RandomUtil.randomInt(instances.size())); } - return instances.get(RandomUtil.randomInt(instances.size())); + + return availableList.get(RandomUtil.randomInt(availableList.size())); + } }