https://toscode.gitee.com/dromara/liteFlow
LiteFlow是一个轻量且强大的国产规则引擎框架,可用于复杂的组件化业务的编排领域,独有的DSL规则驱动整个复杂业务,并可实现平滑刷新热部署,支持多种脚本语言规则的嵌入。帮助系统变得更加丝滑且灵活。
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-spring-boot-starter</artifactId>
<version>2.9.4</version>
</dependency>
@Component("a")
public class ACmp extends NodeComponent {
@Override
public void process() {
//do your business
}
}
...
liteflow.rule-source=config/flow.el.xml
config/flow.el.xml
<?xml version="1.0" encoding="UTF-8"?>
<flow>
<chain name="chain1">
THEN(a, b, c);
</chain>
</flow>
public void testConfig(){
LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
}
FlowExecutor
和liteflowExecutorInit
和MonitorBus
。liteflowExecutorInit
实现了InitializingBean
,会重写afterPropertiesSet
方法,执行this.flowExecutor.init();
。该方法主要是解析规则文件。分别调用ParserHelper#parseNodeDocument
和ParserHelper#parseChainDocument
解析nodes和chain节点的数据。chain的解析,用到了阿里的QLExpress的框架。方法执行,Chain#execute
。核心方法是FlowExecutor#doExecute
。从FlowExecutor#doExecute
走到了Chain#execute
。chain会执行Condition
的列表。Condition主要有ThenCondition,WhenCondition和SwitchCondition。ThenCondition是顺序执行,SwitchCondition是选择执行,WhenCondition是并行执行。Condition会根据不同的类型来执行Node或者Condition。
执行节点。NodeExecutor#execute
。当出现异常会进行重试。NodeComponent#execute
,该方法会在调用节点前,做前置处理,后置处理,异常处理,以及打印当前节点的执行时间。