From e0504999ae2ff879c26aab13768c02b4b29671d2 Mon Sep 17 00:00:00 2001 From: srzou Date: Tue, 23 Jul 2024 09:58:12 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(sj=5F1.2.0-beta1):=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E5=86=B3=E7=AD=96=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E4=B8=8A=E4=B8=8B=E6=96=87=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../snailjob/server/web/controller/WorkflowController.java | 2 +- .../snailjob/server/web/service/WorkflowService.java | 2 +- .../server/web/service/impl/WorkflowServiceImpl.java | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java index 4e9a8e789..9a3296032 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/WorkflowController.java @@ -91,7 +91,7 @@ public class WorkflowController { @PostMapping("/check-node-expression") @LoginRequired(role = RoleEnum.USER) - public Pair checkNodeExpression(@RequestBody @Validated CheckDecisionVO checkDecisionVO) { + public Pair checkNodeExpression(@RequestBody @Validated CheckDecisionVO checkDecisionVO) { return workflowService.checkNodeExpression(checkDecisionVO); } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/WorkflowService.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/WorkflowService.java index 7fe786c09..4c5e2cd0e 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/WorkflowService.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/WorkflowService.java @@ -37,7 +37,7 @@ public interface WorkflowService { List getWorkflowNameList(String keywords, Long workflowId, String groupName); - Pair checkNodeExpression(CheckDecisionVO decisionVO); + Pair checkNodeExpression(CheckDecisionVO decisionVO); void importWorkflowTask(@Valid @NotEmpty(message = "导入数据不能为空") List requests); diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java index 2822985dc..71525abf2 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java @@ -296,19 +296,18 @@ public class WorkflowServiceImpl implements WorkflowService { } @Override - public Pair checkNodeExpression(CheckDecisionVO decisionVO) { + public Pair checkNodeExpression(CheckDecisionVO decisionVO) { try { ExpressionEngine realExpressionEngine = ExpressionTypeEnum.valueOf(decisionVO.getExpressionType()); Assert.notNull(realExpressionEngine, () -> new SnailJobServerException("表达式引擎不存在")); ExpressionInvocationHandler invocationHandler = new ExpressionInvocationHandler(realExpressionEngine); ExpressionEngine expressionEngine = ExpressionFactory.getExpressionEngine(invocationHandler); - expressionEngine.eval(decisionVO.getNodeExpression(), decisionVO.getCheckContent()); + Object eval = expressionEngine.eval(decisionVO.getNodeExpression(), decisionVO.getCheckContent()); + return Pair.of(StatusEnum.YES.getStatus(), eval); } catch (Exception e) { SnailJobLog.LOCAL.error("表达式异常. [{}]", decisionVO.getNodeExpression(), e); return Pair.of(StatusEnum.NO.getStatus(), e.getMessage()); } - - return Pair.of(StatusEnum.YES.getStatus(), StrUtil.EMPTY); } @Override From 04f8137b3ffbd6dd52b66b75db9d81c1756afd45 Mon Sep 17 00:00:00 2001 From: srzou Date: Tue, 30 Jul 2024 16:27:59 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat(sj=5F1.2.0-beta1):=E5=A2=9E=E5=8A=A0LR?= =?UTF-8?q?U=E5=92=8C=E8=BD=AE=E8=AF=A2=E8=B7=AF=E7=94=B1=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E7=9A=84=E5=AE=9A=E6=9C=9F=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/allocate/client/ClientLoadBalanceLRU.java | 7 +++++++ .../common/allocate/client/ClientLoadBalanceRound.java | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java index 9c8014360..1cf47317f 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java @@ -21,9 +21,16 @@ public class ClientLoadBalanceLRU implements ClientLoadBalance { } private ConcurrentHashMap> LRU_CACHE = new ConcurrentHashMap<>(); + private static long CACHE_VALID_TIME = 0; @Override public String route(String allocKey, TreeSet clientAllAddressSet) { + // cache clear + if (System.currentTimeMillis() > CACHE_VALID_TIME) { + LRU_CACHE.clear(); + // 每12个小时定时清理一次数据 + CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*12; + } LinkedHashMap lruItem = LRU_CACHE.get(allocKey); if (Objects.isNull(lruItem)) { lruItem = new LinkedHashMap(16, 0.75f, true) { diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceRound.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceRound.java index a1650387b..aed743111 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceRound.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceRound.java @@ -16,9 +16,16 @@ public class ClientLoadBalanceRound implements ClientLoadBalance { private static final ConcurrentHashMap COUNTER = new ConcurrentHashMap<>(); private static final int THRESHOLD = Integer.MAX_VALUE - 10000; + private static long CACHE_VALID_TIME = 0; @Override public String route(final String allocKey, final TreeSet clientAllAddressSet) { + // cache clear + if (System.currentTimeMillis() > CACHE_VALID_TIME) { + COUNTER.clear(); + // 每12个小时定时清理一次数据 + CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*12; + } String[] addressArr = clientAllAddressSet.toArray(new String[0]); AtomicInteger next = COUNTER.getOrDefault(allocKey, new AtomicInteger(1)); String nextClientId = addressArr[next.get() % clientAllAddressSet.size()]; From 838fe806fc679475b3e5fc294d2e37fb836de4c9 Mon Sep 17 00:00:00 2001 From: srzou Date: Tue, 30 Jul 2024 16:28:33 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat(sj=5F1.2.0-beta1):=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E5=92=8C=E6=9C=80=E5=90=8E=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../allocate/client/ClientLoadBalanceFirst.java | 17 +++++++++++++++++ .../allocate/client/ClientLoadBalanceLast.java | 17 +++++++++++++++++ .../client/ClientLoadBalanceManager.java | 4 +++- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceFirst.java create mode 100644 snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLast.java diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceFirst.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceFirst.java new file mode 100644 index 000000000..57f3d72df --- /dev/null +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceFirst.java @@ -0,0 +1,17 @@ +package com.aizuda.snailjob.server.common.allocate.client; + +import com.aizuda.snailjob.server.common.ClientLoadBalance; + +import java.util.TreeSet; + +public class ClientLoadBalanceFirst implements ClientLoadBalance { + @Override + public String route(String key, TreeSet clientAllAddressSet) { + return clientAllAddressSet.first(); + } + + @Override + public int routeType() { + return ClientLoadBalanceManager.AllocationAlgorithmEnum.FIRST.getType(); + } +} diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLast.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLast.java new file mode 100644 index 000000000..1e978cc21 --- /dev/null +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLast.java @@ -0,0 +1,17 @@ +package com.aizuda.snailjob.server.common.allocate.client; + +import com.aizuda.snailjob.server.common.ClientLoadBalance; + +import java.util.TreeSet; + +public class ClientLoadBalanceLast implements ClientLoadBalance { + @Override + public String route(String key, TreeSet clientAllAddressSet) { + return clientAllAddressSet.last(); + } + + @Override + public int routeType() { + return ClientLoadBalanceManager.AllocationAlgorithmEnum.LAST.getType(); + } +} diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceManager.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceManager.java index a18183aba..b8fd40d70 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceManager.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceManager.java @@ -29,7 +29,9 @@ public class ClientLoadBalanceManager { CONSISTENT_HASH(1, new ClientLoadBalanceConsistentHash(100)), RANDOM(2, new ClientLoadBalanceRandom()), LRU(3, new ClientLoadBalanceLRU(100)), - ROUND(4, new ClientLoadBalanceRound()); + ROUND(4, new ClientLoadBalanceRound()), + FIRST(5, new ClientLoadBalanceFirst()), + LAST(6, new ClientLoadBalanceLast()); private final int type; private final ClientLoadBalance clientLoadBalance;