enhancement #I8FC4F 超大量规则场景下项目启动时间过长的问题

This commit is contained in:
everywhere.z
2023-12-12 18:27:06 +08:00
parent a7d6877336
commit bfa2fef53e
6 changed files with 77 additions and 25 deletions

View File

@@ -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<String, Chain> chainMap = new CopyOnWriteHashMap<>();
private static final Map<String, Chain> chainMap;
private static final Map<String, Node> nodeMap = new CopyOnWriteHashMap<>();
private static final Map<String, Node> nodeMap;
private static final Map<NodeTypeEnum, Node> fallbackNodeMap = new CopyOnWriteHashMap<>();
private static final Map<NodeTypeEnum, Node> 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) {

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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());

View File

@@ -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",

View File

@@ -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