From bfa2fef53ee0b7ae195399e81f1aa2e8fa7bcb38 Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Tue, 12 Dec 2023 18:27:06 +0800 Subject: [PATCH] =?UTF-8?q?enhancement=20#I8FC4F=20=E8=B6=85=E5=A4=A7?= =?UTF-8?q?=E9=87=8F=E8=A7=84=E5=88=99=E5=9C=BA=E6=99=AF=E4=B8=8B=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=90=AF=E5=8A=A8=E6=97=B6=E9=97=B4=E8=BF=87=E9=95=BF?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yomahub/liteflow/flow/FlowBus.java | 25 ++++++++---- .../liteflow/property/LiteflowConfig.java | 18 ++++++++- .../liteflow/springboot/LiteflowProperty.java | 39 ++++++++++++------- .../LiteflowPropertyAutoConfiguration.java | 3 +- ...itional-spring-configuration-metadata.json | 14 +++++++ .../META-INF/liteflow-default.properties | 3 +- 6 files changed, 77 insertions(+), 25 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java index d1efb898e..c7ea30335 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java @@ -27,6 +27,8 @@ import com.yomahub.liteflow.log.LFLoggerManager; import com.yomahub.liteflow.parser.el.LocalJsonFlowELParser; import com.yomahub.liteflow.parser.el.LocalXmlFlowELParser; import com.yomahub.liteflow.parser.el.LocalYmlFlowELParser; +import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.property.LiteflowConfigGetter; import com.yomahub.liteflow.script.ScriptExecutorFactory; import com.yomahub.liteflow.script.exception.ScriptLoadException; import com.yomahub.liteflow.script.exception.ScriptSpiException; @@ -36,10 +38,7 @@ import com.yomahub.liteflow.spi.holder.DeclComponentParserHolder; import com.yomahub.liteflow.util.CopyOnWriteHashMap; import com.yomahub.liteflow.core.proxy.LiteFlowProxyUtil; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; @@ -53,15 +52,25 @@ public class FlowBus { private static final LFLog LOG = LFLoggerManager.getLogger(FlowBus.class); - private static final Map chainMap = new CopyOnWriteHashMap<>(); + private static final Map chainMap; - private static final Map nodeMap = new CopyOnWriteHashMap<>(); + private static final Map nodeMap; - private static final Map fallbackNodeMap = new CopyOnWriteHashMap<>(); + private static final Map fallbackNodeMap; private static AtomicBoolean initStat = new AtomicBoolean(false); - private FlowBus() { + static { + LiteflowConfig liteflowConfig = LiteflowConfigGetter.get(); + if (liteflowConfig.getFastLoad()){ + chainMap = new HashMap<>(); + nodeMap = new HashMap<>(); + fallbackNodeMap = new HashMap<>(); + }else{ + chainMap = new CopyOnWriteHashMap<>(); + nodeMap = new CopyOnWriteHashMap<>(); + fallbackNodeMap = new CopyOnWriteHashMap<>(); + } } public static Chain getChain(String id) { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java b/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java index 086c301d5..8696a34ab 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java @@ -115,6 +115,9 @@ public class LiteflowConfig { // 是否启用组件降级 private Boolean fallbackCmpEnable; + //是否快速加载规则,如果快速加载规则意味着不用copyOnWrite机制了 + private Boolean fastLoad; + public Boolean getEnableMonitorFile() { return enableMonitorFile; } @@ -452,7 +455,7 @@ public class LiteflowConfig { public Boolean getFallbackCmpEnable() { if (ObjectUtil.isNull(this.fallbackCmpEnable)) { - return false; + return Boolean.FALSE; } else { return fallbackCmpEnable; } @@ -474,4 +477,17 @@ public class LiteflowConfig { public void setWhenThreadPoolIsolate(Boolean whenThreadPoolIsolate) { this.whenThreadPoolIsolate = whenThreadPoolIsolate; } + + public Boolean getFastLoad() { + if (ObjectUtil.isNull(fastLoad)) { + return Boolean.FALSE; + } + else { + return fastLoad; + } + } + + public void setFastLoad(Boolean fastLoad) { + this.fastLoad = fastLoad; + } } diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowProperty.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowProperty.java index 1557f4720..63271ce03 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowProperty.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowProperty.java @@ -78,24 +78,27 @@ public class LiteflowProperty { private boolean printExecutionLog; // 规则文件/脚本文件变更监听 - private Boolean enableMonitorFile; + private boolean enableMonitorFile; private String parallelLoopExecutorClass; //使用默认并行循环线程池时,最大线程数 - private Integer parallelMaxWorkers; + private int parallelMaxWorkers; //使用默认并行循环线程池时,最大队列数 - private Integer parallelQueueLimit; + private int parallelQueueLimit; // 是否启用组件降级 - private Boolean fallbackCmpEnable; + private boolean fallbackCmpEnable; - public Boolean getEnableMonitorFile() { + //是否快速加载规则,如果快速加载规则意味着不用copyOnWrite机制了 + private boolean fastLoad; + + public boolean isEnableMonitorFile() { return enableMonitorFile; } - public void setEnableMonitorFile(Boolean enableMonitorFile) { + public void setEnableMonitorFile(boolean enableMonitorFile) { this.enableMonitorFile = enableMonitorFile; } @@ -269,27 +272,27 @@ public class LiteflowProperty { this.parallelLoopExecutorClass = parallelLoopExecutorClass; } - public Integer getParallelMaxWorkers() { + public int getParallelMaxWorkers() { return parallelMaxWorkers; } - public void setParallelMaxWorkers(Integer parallelMaxWorkers) { + public void setParallelMaxWorkers(int parallelMaxWorkers) { this.parallelMaxWorkers = parallelMaxWorkers; } - public Integer getParallelQueueLimit() { + public int getParallelQueueLimit() { return parallelQueueLimit; } - public void setParallelQueueLimit(Integer parallelQueueLimit) { + public void setParallelQueueLimit(int parallelQueueLimit) { this.parallelQueueLimit = parallelQueueLimit; } - - public Boolean isFallbackCmpEnable() { + + public boolean isFallbackCmpEnable() { return fallbackCmpEnable; } - - public void setFallbackCmpEnable(Boolean fallbackCmpEnable) { + + public void setFallbackCmpEnable(boolean fallbackCmpEnable) { this.fallbackCmpEnable = fallbackCmpEnable; } @@ -300,4 +303,12 @@ public class LiteflowProperty { public void setWhenThreadPoolIsolate(boolean whenThreadPoolIsolate) { this.whenThreadPoolIsolate = whenThreadPoolIsolate; } + + public boolean isFastLoad() { + return fastLoad; + } + + public void setFastLoad(boolean fastLoad) { + this.fastLoad = fastLoad; + } } diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowPropertyAutoConfiguration.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowPropertyAutoConfiguration.java index 9bfc7bef0..1a7a092cc 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowPropertyAutoConfiguration.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowPropertyAutoConfiguration.java @@ -43,11 +43,12 @@ public class LiteflowPropertyAutoConfiguration { liteflowConfig.setMainExecutorWorks(property.getMainExecutorWorks()); liteflowConfig.setMainExecutorClass(property.getMainExecutorClass()); liteflowConfig.setPrintExecutionLog(property.isPrintExecutionLog()); - liteflowConfig.setEnableMonitorFile(property.getEnableMonitorFile()); + liteflowConfig.setEnableMonitorFile(property.isEnableMonitorFile()); liteflowConfig.setParallelMaxWorkers(property.getParallelMaxWorkers()); liteflowConfig.setParallelQueueLimit(property.getParallelQueueLimit()); liteflowConfig.setParallelLoopExecutorClass(property.getParallelLoopExecutorClass()); liteflowConfig.setFallbackCmpEnable(property.isFallbackCmpEnable()); + liteflowConfig.setFastLoad(property.isFastLoad()); liteflowConfig.setEnableLog(liteflowMonitorProperty.isEnableLog()); liteflowConfig.setQueueLimit(liteflowMonitorProperty.getQueueLimit()); liteflowConfig.setDelay(liteflowMonitorProperty.getDelay()); diff --git a/liteflow-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/liteflow-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 16606752c..92197d877 100644 --- a/liteflow-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/liteflow-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -145,6 +145,20 @@ "sourceType": "com.yomahub.liteflow.springboot.LiteflowProperty", "defaultValue": true }, + { + "name": "liteflow.fallback-cmp-enable", + "type": "java.lang.Boolean", + "description": "Whether to enable component fallback.", + "sourceType": "com.yomahub.liteflow.springboot.LiteflowProperty", + "defaultValue": false + }, + { + "name": "liteflow.fast-load", + "type": "java.lang.Boolean", + "description": "Whether to enable fast load mode.", + "sourceType": "com.yomahub.liteflow.springboot.LiteflowProperty", + "defaultValue": false + }, { "name": "liteflow.monitor.enable-log", "type": "java.lang.Boolean", diff --git a/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties b/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties index d1a749034..5f69bdbb2 100644 --- a/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties +++ b/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties @@ -15,7 +15,8 @@ liteflow.retry-count=0 liteflow.support-multiple-type=false liteflow.node-executor-class=com.yomahub.liteflow.flow.executor.DefaultNodeExecutor liteflow.print-execution-log=true -liteflow.substitute-cmp-class= +liteflow.fallback-cmp-enable=false +liteflow.fast-load=false liteflow.parallel-max-workers=16 liteflow.parallel-queue-limit=512 liteflow.parallel-loop-executor-class=com.yomahub.liteflow.thread.LiteFlowDefaultParallelLoopExecutorBuilder