LiteFlow 框架分析系列(一):工作原理与快速入门

LiteFlow 框架分析系列(一):工作原理与快速入门

摘要

本篇作为 LiteFlow 框架分析系列的第一篇,主要带大家宏观了解 LiteFlow 是什么,它的核心设计理念是什么,以及它是如何通过一套简单的 DSL(领域特定语言)规则来驱动复杂的业务逻辑的。我们将通过一个简单的示例,结合 PlantUML 时序图,展示 LiteFlow 的运行机制。

1. LiteFlow 是什么?

简单来说,LiteFlow 就是一个编排式的规则引擎

想象一下,你的代码里是不是充满了各种 if-else,或者一堆臃肿的 Service 调用?业务流程复杂的时候,改一个逻辑可能要动好几个文件,牵一发而动全身。

LiteFlow 的出现就是为了解决这个问题。它把你的业务逻辑拆分成一个个独立的“组件”(Component),然后通过一个规则文件(EL 表达式)把这些组件像搭积木一样串起来。

核心思想就两点:

  1. 组件化:把业务逻辑切碎。
  2. 编排化:用规则来决定执行顺序。

2. 核心概念

在深入源码之前,咱们得先对齐一下 LiteFlow 的几个核心概念,这就像学外语先背单词一样。

  • Node (节点):流程中最小的执行单元。你可以把它理解为一个 Java 类,里面写了具体的业务代码。
  • Component (组件):Node 的具体实现。在代码里,通常继承 NodeComponent 类。
  • Chain (流程链):一串 Node 的组合。比如“先执行 A,再执行 B,如果 A 成功了再执行 C”,这就是一条 Chain。
  • EL (表达式语言):用来定义 Chain 的语法。LiteFlow 独创了一套非常丝滑的语法,比如 THEN(a, b, c) 表示串行执行,WHEN(a, b, c) 表示并行执行。
  • Slot (槽/上下文):流程执行的数据容器。你可以把它看作是一个流动的 Map,所有组件都可以从里面存取数据,实现数据共享。

3. 工作原理

LiteFlow 是怎么跑起来的呢?咱们用一张图来说明。

当你在 Spring Boot 启动的时候,LiteFlow 会做这么几件事:

  1. 加载配置:读取 liteflow.rule-source 配置的规则文件。
  2. 解析规则:把 XML/JSON/YAML 里的规则解析成内存里的 ChainNode 对象。
  3. 注册组件:把你的 Java Component 注册到 LiteFlow 的容器里。

当你调用 flowExecutor.execute2Resp("chain1", param) 时:
image.png

关键步骤解析:

  1. 找链FlowBus 是 LiteFlow 的“交通枢纽”,它管理着所有的 Chain。执行器首先问它要到名为 chain1 的链。
  2. 执行链:Chain 拿到后,根据定义好的 EL 规则(比如 THEN(A, B)),依次调度组件。
  3. 组件执行:组件 A 和 B 依次运行。注意,它们之间不直接传递参数,而是通过 Slot 这个公共区域来交换数据。这大大降低了耦合度!

4. 快速上手示例

光说不练假把式,咱们看个最简单的 Spring Boot 集成例子。

第一步:定义组件

/* by 01022.hk - online tools website : 01022.hk/zh/tripledes.html */
@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);
    }
}

第二步:定义规则 (flow.el.xml)

/* by 01022.hk - online tools website : 01022.hk/zh/tripledes.html */
<?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("执行成功");
        }
    }
}

5. 总结

这一篇我们主要通过白话的方式介绍了 LiteFlow 的“世界观”。

  • 它的核心价值:解耦。把“做什么”(Component)和“怎么做”(Rule)分开了。
  • 它的运行方式:FlowExecutor 接收指令 -> FlowBus 查找流程 -> Chain 调度组件 -> Slot 传递数据。

LiteFlow 就像一个精密的生产线指挥系统,你只需要负责造零件(组件)和画图纸(规则),剩下的调度工作,它全包了。

下载前必看:https://renmaiwang.cn/s/bvbfw Verilog设计_串并转换 / 移位寄存器实现了种串并转换的功能,其核心原理在于移位寄存器的运用。 这里详细展示了串转并以及并转串两种不同的设计方案。 每种转换模式都设有专属的使能信号,同时并行输出数据的格式提供了两种选择:最低有效位优先(lsb)和最高有效位优先(msb)。 串并转换技术主要应用于串行传输并行传输这两种数据传输模式之间的相互转换,而移位寄存器是达成这目标的常用工具,能够支持并行及串行的数据输入输出操作。 这些移位寄存器通常被设定为“串行输入、并行输出”(SIPO)或“并行输入、串行输出”(PISO)两种工作模式。 在串行数据输出的过程中,构成数据和字符的码元会按照既定的时间顺序逐位进行传输。 相比之下,并行数据传输则是在同时刻将固定数量(普遍为8位或16位等)的数据和字符码元同时发送至接收端。 数据输入通常采用串行格式进行。 旦数据成功输入寄存器,它便可以在所有输出端同时被读取,或者选择逐位移出。 寄存器中的每个触发器均设计为边沿触发类型,并且所有触发器均以特定的时钟频率协同工作。 对于每个输入位而言,它需要经过N个时钟周期才能最终在N个输出端呈现,从而完成并行输出。 值得注意的是,在串行加载数据期间,并行输出端的数据状态应保持稳定。 数据输入则采用并行格式。 在将数据写入寄存器的操作过程中,写/移位控制线必须暂时处于非工作状态;而旦需要执行移位操作,控制线便会变为激活状态,并且寄存器会被锁定以保持当前状态。 只要时钟周期数不超过输入数据串的长度,数据输出端Q将按照预定的顺序逐位读出并行数据,并且必须明确区分最低有效位(LSB)和最高有效位(MSB)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值