当前位置: 首页 > 工具软件 > LiteFlow > 使用案例 >

【开源项目】LiteFlow入门及源码解析

何向荣
2023-12-01

LiteFlow入门及源码解析

源码地址

https://toscode.gitee.com/dromara/liteFlow

项目介绍

LiteFlow是一个轻量且强大的国产规则引擎框架,可用于复杂的组件化业务的编排领域,独有的DSL规则驱动整个复杂业务,并可实现平滑刷新热部署,支持多种脚本语言规则的嵌入。帮助系统变得更加丝滑且灵活。

入门案例

  1. 引入依赖
<dependency>
    <groupId>com.yomahub</groupId>
    <artifactId>liteflow-spring-boot-starter</artifactId>
    <version>2.9.4</version>
</dependency>
  1. 添加组件
@Component("a")
public class ACmp extends NodeComponent {

	@Override
	public void process() {
		//do your business
	}
}

...
  1. 增加配置
liteflow.rule-source=config/flow.el.xml
  1. 在resources下添加规则文件config/flow.el.xml
<?xml version="1.0" encoding="UTF-8"?>
<flow>
    <chain name="chain1">
        THEN(a, b, c);
    </chain>
</flow>
  1. 执行
 public void testConfig(){
        LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
    }

源码解析

系统启动

  1. 加载liteflow-spring-boot-starter的jar包中的spring.factories,引入LiteflowMainAutoConfiguration到spring容器中。LiteflowMainAutoConfiguration定义了FlowExecutorliteflowExecutorInitMonitorBus
  2. FlowExecutor的初始化。liteflowExecutorInit实现了InitializingBean,会重写afterPropertiesSet方法,执行this.flowExecutor.init();。该方法主要是解析规则文件。分别调用ParserHelper#parseNodeDocumentParserHelper#parseChainDocument解析nodes和chain节点的数据。chain的解析,用到了阿里的QLExpress的框架。

运行流程

  1. 方法执行,Chain#execute。核心方法是FlowExecutor#doExecute。从FlowExecutor#doExecute走到了Chain#execute。chain会执行Condition的列表。Condition主要有ThenCondition,WhenCondition和SwitchCondition。ThenCondition是顺序执行,SwitchCondition是选择执行,WhenCondition是并行执行。Condition会根据不同的类型来执行Node或者Condition。

  2. 执行节点。NodeExecutor#execute。当出现异常会进行重试。NodeComponent#execute,该方法会在调用节点前,做前置处理,后置处理,异常处理,以及打印当前节点的执行时间。

 类似资料: