From 895fd5b38dd4da2d0df61ab4d56f75c16dc5b4d4 Mon Sep 17 00:00:00 2001 From: zhudeyu Date: Fri, 18 Jul 2025 14:08:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(route)=20=E4=BF=AE=E5=A4=8D=E8=BD=AE?= =?UTF-8?q?=E8=AF=A2=E6=89=A7=E8=A1=8C=E5=99=A8=E8=B7=AF=E7=94=B1=E7=AD=96?= =?UTF-8?q?=E7=95=A5bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增: 1. 修复轮询执行器路由策略新增执行器时,执行器记录器中没有记录新地址时,抛出NPE --- .../strategy/ExecutorRouteRoundHandler.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRoundHandler.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRoundHandler.java index d2dcadc2..00611b88 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRoundHandler.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRoundHandler.java @@ -91,6 +91,15 @@ public class ExecutorRouteRoundHandler extends ExecutorRouter { MAX_TIME=1; return new ReturnT(address); }else{ + // 使用set收集执行器地址, 用于识别是否有执行器新增或删除 + Set addrSet = addressList.stream().map(e -> extractIp(e)).collect(Collectors.toSet()); + // 检查是否新增执行器 + addrSet.forEach(e->{ + if(!routeMap.containsKey(e)){ + // 新增的执行器默认给最大值,避免 将所有任务全部调度到该执行器上影响平衡 + routeMap.put(e,MAX_TIME); + } + }); for (String addr : addressList) { // 获取ip String key = extractIp(addr); @@ -107,8 +116,7 @@ public class ExecutorRouteRoundHandler extends ExecutorRouter { String key = extractIp(addr); routeMap.put(key,MAX_TIME+1); MAX_TIME=MAX_TIME+1; - // 使用set收集执行器地址, 用于识别是否有执行器新增或删除 - Set addrSet = addressList.stream().map(e -> extractIp(e)).collect(Collectors.toSet()); + // 检查是否有执行器卸载了执行器 Set keySet = routeMap.keySet(); keySet.forEach(e->{ @@ -118,13 +126,7 @@ public class ExecutorRouteRoundHandler extends ExecutorRouter { routeMap.remove(e); } }); - // 检查是否新增执行器 - addrSet.forEach(e->{ - if(!routeMap.containsKey(e)){ - // 新增的执行器默认给最大值,避免 将所有任务全部调度到该执行器上影响平衡 - routeMap.put(e,MAX_TIME); - } - }); + return new ReturnT(addr); }