











本篇作为 LiteFlow 框架分析系列的第一篇,主要带大家宏观了解 LiteFlow 是什么,它的核心设计理念是什么,以及它是如何通过一套简单的 DSL(领域特定语言)规则来驱动复杂的业务逻辑的。我们将通过一个简单的示例,结合 PlantUML 时序图,展示 LiteFlow 的运行机制。
简单来说,LiteFlow 就是一个编排式的规则引擎。
想象一下,你的代码里是不是充满了各种 if-else,或者一堆臃肿的 Service 调用?业务流程复杂的时候,改一个逻辑可能要动好几个文件,牵一发而动全身。
LiteFlow 的出现就是为了解决这个问题。它把你的业务逻辑拆分成一个个独立的“组件”(Component),然后通过一个规则文件(EL 表达式)把这些组件像搭积木一样串起来。
核心思想就两点:
在深入源码之前,咱们得先对齐一下 LiteFlow 的几个核心概念,这就像学外语先背单词一样。
NodeComponent 类。THEN(a, b, c) 表示串行执行,WHEN(a, b, c) 表示并行执行。LiteFlow 是怎么跑起来的呢?咱们用一张图来说明。
当你在 Spring Boot 启动的时候,LiteFlow 会做这么几件事:
liteflow.rule-source 配置的规则文件。Chain 和 Node 对象。当你调用 flowExecutor.execute2Resp("chain1", param) 时:

FlowBus 是 LiteFlow 的“交通枢纽”,它管理着所有的 Chain。执行器首先问它要到名为 chain1 的链。THEN(A, B)),依次调度组件。Slot 这个公共区域来交换数据。这大大降低了耦合度!光说不练假把式,咱们看个最简单的 Spring Boot 集成例子。
@LiteflowComponent("a")
public class ACmp extends NodeComponent {
@Override
public void process() {
System.out.println("ACmp executed!");
// 往上下文放点东西
this.getContextBean(DefaultContext.class).setData("data", "hello");
}
}
@LiteflowComponent("b")
public class BCmp extends NodeComponent {
@Override
public void process() {
System.out.println("BCmp executed!");
// 从上下文拿东西
String data = this.getContextBean(DefaultContext.class).getData("data");
System.out.println("Data from A: " + data);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<flow>
<chain name="chain1">
THEN(a, b);
</chain>
</flow>
@Component
public class TestRunner implements CommandLineRunner {
@Resource
private FlowExecutor flowExecutor;
@Override
public void run(String... args) throws Exception {
LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
if (response.isSuccess()){
System.out.println("执行成功");
}
}
}
这一篇我们主要通过白话的方式介绍了 LiteFlow 的“世界观”。
LiteFlow 就像一个精密的生产线指挥系统,你只需要负责造零件(组件)和画图纸(规则),剩下的调度工作,它全包了。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。