LiteFlow轻量级工作流引擎使用示例详解

LiteFlow轻量级工作流引擎使用示例详解

在复杂的业务系统中,流程编排逻辑解耦是提升可维护性的关键挑战。LiteFlow作为一款国产轻量级工作流引擎,以其声明式编排组件化设计极简API成为优雅解决这些问题的利器。下面通过详细示例展示其核心用法。


一、LiteFlow 核心概念速览

  1. 组件 (Component):业务逻辑的最小执行单元,继承 NodeComponent
  2. 流程 (Chain):由组件节点组成的执行链路,通过 EL 表达式(如 THEN(a, b, c))定义。
  3. 上下文 (Context):流程中传递数据的载体,自定义数据容器。
  4. 规则文件:XML 或 JSON 格式的流程定义文件(默认位置:resources/rule)。

二、SpringBoot 整合 LiteFlow

依赖引入

<dependency>
    <groupId>com.yomahub</groupId>
    <artifactId>liteflow-spring-boot-starter</artifactId>
    <version>2.11.1</version>
</dependency>

配置 application.yml

liteflow:
  rule-source: config/flow-rule.xml  # 规则文件路径
  enable-log: true                  # 启用执行日志

三、实战示例:订单处理工作流

场景描述

订单创建 → 库存校验 → 支付处理 → 订单状态更新 → 通知用户

1. 定义上下文(数据载体)
public class OrderContext extends Context {
    private Order order;     // 订单实体
    private boolean stockOk; // 库存状态
    private String paymentResult; // 支付结果
    // 省略 getter/setter
}
2. 实现业务组件
@Component("stockCheck")
public class StockCheckCmp extends NodeComponent {
    @Override
    public void process() {
        OrderContext ctx = getContextBean(OrderContext.class);
        boolean available = stockService.check(ctx.getOrder().getSkuId());
        ctx.setStockOk(available);
        if (!available) throw new RuntimeException("库存不足!");
    }
}

@Component("payment")
public class PaymentCmp extends NodeComponent {
    @Override
    public void process() {
        OrderContext ctx = getContextBean(OrderContext.class);
        ctx.setPaymentResult(paymentService.pay(ctx.getOrder()));
    }
}

// 其他组件:OrderCreateCmp, StatusUpdateCmp, NotifyUserCmp
3. 编写流程规则 (flow-rule.xml)
<chain name="orderProcessChain">
    <!-- 顺序执行 + 条件分支 -->
    THEN(
        orderCreate, 
        stockCheck, 
        SWITCH(payment).TO(
            WHEN(creditCardPay, aliPay),  // 并行支付方式
            wechatPay
        ),
        statusUpdate,
        notifyUser
    );
</chain>
4. 触发流程执行
@RestController
public class OrderController {
    @Resource private FlowExecutor flowExecutor;

    @PostMapping("/createOrder")
    public String createOrder(@RequestBody Order order) {
        OrderContext ctx = new OrderContext();
        ctx.setOrder(order);
        
        LiteflowResponse response = flowExecutor.execute2Resp(
            "orderProcessChain",   // 规则链名称 
            null,                  // 流程初始参数(可空)
            ctx                   // 业务上下文
        );
        
        return response.isSuccess() ? "订单创建成功" : "失败:" + response.getMessage();
    }
}

四、进阶用法示例

1. 条件分支与跳转
<chain name="complexChain">
    IF(x, THEN(a, b).ELSE(c)),  // 条件判断
    SWITCH(y).TO(d, e, f),      // 选择分支
    FOR(f).DO(THEN(g, h))        // 循环执行
</chain>
2. 异步节点执行
@Component("asyncTask")
public class AsyncTaskCmp extends NodeComponent {
    @Override
    public void process() {
        // 标记当前节点异步执行
        this.setIsAsync(true);
        asyncService.execute(() -> {
            // 耗时操作
            sendReportEmail();
        });
    }
}
3. 组件复用与嵌套
<chain name="parentChain">
    THEN(prepare, SUB(child_chain), postProcess)
</chain>

<chain name="child_chain">
    THEN(task1, task2)
</chain>

五、LiteFlow 核心优势

  1. 轻量嵌入:仅需 2 个依赖,无中间件强依赖
  2. 热更新:修改规则文件实时生效,无需重启
  3. 可视化跟踪:内置 liteflow-slot 日志输出执行路径
  4. 灵活扩展:支持自定义节点、拦截器、上下文插件
  5. 优雅降级:提供 fallback 方法处理组件异常

六、性能优化建议

  • 避免上下文臃肿:仅传递必要数据
  • 异步化慢操作:对 I/O 密集型组件启用 isAsync
  • 复用子链:抽象通用流程片段
  • 缓存规则解析:配置 liteflow.parse-on-start=true

七、适用场景对比

场景LiteFlow 优势替代方案
动态业务流程规则热更新,灵活调整路径硬编码 if/else
多版本流程并存通过不同 Chain 隔离策略模式+工厂
可视化流程跟踪内置执行路径输出手动日志拼接
组件化业务复用跨流程共享节点工具类抽取

统计显示:在中等复杂度流程中,LiteFlow 比硬编码逻辑减少 60% 的代码修改量,提升流程调整效率 3 倍以上。


八、总结

LiteFlow 通过 “组件 + 规则文件” 的解耦设计,完美平衡了灵活性与可维护性。其特点在于:

  • 学习曲线平缓:EL 表达式接近自然语言
  • 侵入性极低:业务组件无需感知流程逻辑
  • 扩展性强:支持自定义脚本节点(Groovy/JS)
  • 生态完善:提供 IDEA 插件、监控台等工具

项目地址https://github.com/dromara/liteflow
最佳实践:适用于订单、风控、审批、数据管道等需要灵活编排的场景。

在微服务架构下,LiteFlow 可作为单服务内部的流程调度引擎,与 Camunda 等重型 BPMN 引擎形成互补,在轻量化场景中展现出显著优势。通过本文示例,开发者可快速掌握其核心用法,为业务系统注入灵活高效的流程控制能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷爱码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值