在复杂的业务场景中,工作流引擎是解耦业务逻辑、提升可维护性的核心组件。传统的BPM引擎(如 Activiti、Flowable)虽功能强大,但学习曲线陡峭且资源消耗较大。LiteFlow 作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择。本文将详细讲解 Solon 集成 LiteFlow 的全过程,助你轻松驾驭轻量级流程编排。

一、LiteFlow核心优势

  • 轻量嵌入:仅需2个核心JAR包,无数据库依赖
  • 规则驱动:基于EL表达式的链式规则配置,变更实时生效
  • 组件化设计:业务逻辑封装为可复用组件,支持热插拔
  • 高性能:无反射执行,单线程每秒可处理万级任务
  • 多类型支持:顺序流、条件分支、循环、嵌套、异步并行

二、Solon 集成实战

准备:添加依赖包

<!-- pom.xml 依赖 -->
<dependencies>
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-solon-plugin</artifactId>
<version>最新版</version>
</dependency>
</dependencies>

步骤1:定义流程组件

import com.yomahub.liteflow.core.NodeComponent;
import org.noear.solon.annotation.Managed; // 普通组件示例
@Managed("paymentAction")
public class PaymentAction extends NodeComponent {
@Override
public void process() {
PaymentContext context = this.getContextBean(PaymentContext.class);
// 执行支付逻辑
System.out.println("处理支付, 订单:" + context.getOrderId());
}
} // 条件组件示例(用于分支判断)
@Managed("userCheck")
public class UserCheck extends NodeComponent {
@Override
public void process() {
UserContext context = this.getContextBean(UserContext.class);
if(context.isVip()) {
this.setIsEnd(true); // 终止流程
}
}
}

步骤2:配置流程规则

resources/flow.yml 配置EL表达式规则:

liteflow:
rule-source: config/flow.el.xml

resources/config/flow.el.xml

<?xml version="1.0" encoding="UTF-8"?>
<flow>
<chain name="orderProcess">
THEN(
initOrder,
WHEN(
checkInventory,
checkUserCredit
),
SWITCH(choosePayWay).TO(
CASE(aliPay).DO(aliPayAction),
CASE(wechatPay).DO(wechatPayAction)
),
AFTER(paymentAction).WHEN(userCheck)
);
</chain>
</flow>

步骤3:初始化上下文并执行流程

import com.yomahub.liteflow.core.FlowExecutor;
import com.yomahub.liteflow.flow.LiteflowResponse;
import org.noear.solon.annotation.*; @Controller
public class OrderController { @Inject
private FlowExecutor flowExecutor; @Post
@Mapping("/submitOrder")
public String submitOrder(@Body OrderDTO order) {
OrderContext context = new OrderContext();
context.setOrderId(order.getId());
context.setAmount(order.getAmount()); LiteflowResponse response = flowExecutor.execute2Resp(
"orderProcess",
context,
OrderContext.class
); return response.isSuccess() ? "订单成功" : "流程失败";
}
}

三、高级特性应用

异步并行执行

<!-- 配置并行节点 -->
<chain name="parallelChain">
THEN(
a,
WHEN(b, c, d), <!-- b,c,d并行执行 -->
e
);
</chain>

嵌套子流程

<chain name="mainFlow">
THEN(prepare, SUB(orderProcess), notify);
</chain>

组件降级处理

import com.yomahub.liteflow.core.NodeComponent;
import org.noear.solon.annotation.Managed; @Managed("paymentAction")
public class PaymentAction extends NodeComponent {
@Inject
FallbackService fallbackService; @Override
public void process() {...} @Override
public void onError() {
// 支付失败时执行补偿逻辑
fallbackService.compensate();
}
}

规则热更新

import com.yomahub.liteflow.flow.FlowBus;
import org.noear.solon.annotation.Managed;
import org.noear.solon.core.bean.LifecycleBean; // 动态添加规则
FlowBus.addChain("newChain", "THEN(a,b,c)"); // 监听规则变化
@Managed
public class FlowConfig implements LifecycleBean {
@Override
public void postStart() throws Throwable {
FileWatcher.watch(Paths.get("config/flow"),
() -> FlowBus.reloadRule());
}
}

四、监控与调试

流程跟踪

LiteflowResponse response = flowExecutor.execute2Resp(
"orderProcess",
context,
OrderContext.class,
// 开启执行链路跟踪
SlotCallbackBuilder.builder().build()
); System.out.println(response.getExecuteStepStr());

输出示例:initOrder[✓] => checkInventory[✓] => checkUserCredit[✓] => ...

可视化监控(需企业版)

liteflow:
monitor:
enable-log: true
queue-limit: 200
delay: 30
period: 120

五、最佳实践建议

上下文设计原则

  • 使用独立Context对象传递流程数据
  • 避免在组件中操作数据库事务(应在Service层控制)

组件规范

  • 单个组件代码不超过200行
  • 组件命名采用"业务域+操作"格式(如:stockDeduct)

异常处理

  • 业务异常通过 throw BusinessException 中断流程
  • 系统异常自动触发 onError 回调

规则管理进阶

// 从数据库加载规则
@Managed
public class DBRuleLoader implements RuleSource {
@Override
public String loadRules() {
return ruleMapper.selectByApp("order-service");
}
}

结语

通过 Solon 集成 LiteFlow,我们实现了:

  • 业务可视化编排:复杂流程通过EL表达式清晰定义
  • 组件热插拔:新增业务节点无需停服
  • 极致性能:单机万级TPS满足高并发场景
  • 灵活扩展:支持自定义节点、拦截器、上下文

在微服务架构下,LiteFlow 的轻量级特性使其成为业务流程编排的理想选择。其简洁的API设计让开发者能快速上手,而强大的异步并行、嵌套流程等特性又能支撑复杂业务场景。

Solon 集成 LiteFlow:轻量级工作流引擎的极简实践指南的更多相关文章

  1. Mongodb极简实践

    MongoDB 极简实践入门 1. 为什么用MongoDB? 传统的计算机应用大多使用关系型数据库来存储数据,比如大家可能熟悉的MySql, Sqlite等等,它的特点是数据以表格(table)的形式 ...

  2. MongoDB 极简实践入门

    原作者StevenSLXie; 原链接(https://github.com/StevenSLXie/Tutorials-for-Web-Developers/blob/master/MongoDB% ...

  3. 黑科技抢先尝(续2) - Windows terminal中Powershell Tab的极简美化指南

    目录 安装python 安装git 安装powerline字体 主题定制 安装oh-my-posh 查看策略组的执行权限 使用choco 安装终端模拟器 - ConEmu 优化 PowerShell ...

  4. 黑科技抢先尝(续) - Windows terminal中WSL Linux 终端的极简美化指南

    目录 修改默认源,为apt-get安装提速 安装python 和 python pip 安装 zsh 安装powerline-font中的特定字体 安装powerline-shell 修改~目录下的配 ...

  5. 极简SpringBoot指南-Chapter05-SpringBoot中的AOP面向切面编程简介

    仓库地址 w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started ...

  6. 极简SpringBoot指南-Chapter04-基于SpringBoot的书籍管理Web服务

    仓库地址 w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started ...

  7. 极简SpringBoot指南-Chapter03-基于SpringBoot的Web服务

    仓库地址 w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started ...

  8. 极简SpringBoot指南-Chapter02-Spring依赖注入的方式

    仓库地址 w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started ...

  9. 极简SpringBoot指南-Chapter01-如何用Spring框架声明Bean

    仓库地址 w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started ...

  10. 极简SpringBoot指南-Chapter00-学习SpringBoot前的基本知识

    仓库地址 w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started ...

随机推荐

  1. .NET程序启动就报错,如何截获初期化时的问题json

    一:背景 1. 讲故事 前几天训练营里的一位朋友在复习课件的时候,程序一跑就报错,截图如下: 从给出的错误信息看大概是因为json格式无效导致的,在早期的训练营里曾经也有一例这样的报错,最后定位下来是 ...

  2. C#之MethodImpl(MethodImplOptions.Synchronized)

    [MethodImpl(MethodImplOptions.Synchronized)] 是 C# 中用于指定方法同步的一个特性,它控制方法的执行方式,确保在多线程环境下某个方法的执行是线程安全的.它 ...

  3. .NET外挂系列:4. harmony 中补丁参数的有趣玩法(上)

    一:背景 1. 讲故事 前面几篇我们说完了 harmony 的几个注入点,这篇我们聚焦注入点可接收的几类参数的解读,非常有意思,在.NET高级调试 视角下也是非常重要的,到底是哪些参数,用一张表格整理 ...

  4. Kafka怎么配置SASL用户名密码认证

    服务端配置(server.properties): # 开启SASL认证 security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN # 配置JAAS文 ...

  5. centos8安装部署RADIUS+MySQLPGSQL高可用架构实现

    以下是针对中大型网络的 RADIUS+MySQL/PGSQL高可用方案 的完整实现,包含数据库集成.主备集群部署和Keepalived配置: 一.MySQL/PGSQL数据库集成(以MySQL为例) ...

  6. docker 发布netcore webapi

    新建项目testapi 新建Dockerfile 文件 FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-nanoserver-1809 AS base WO ...

  7. Vue3+Ts笔记:基于element-UI 实现下拉框滚动翻页查询通用组件

    element 提供了 el-select组件,并且支持远程搜索,但是对于数据量大需要翻页的场景并未提供相应配置,所以自己写了一个通用组件,作为记录 初始化控件,定义传入参数 将远程查询的接口封装为函 ...

  8. 开源直播课丨高效稳定易用的数据集成框架——ChunJun类加载原理与实现

    一.直播介绍 前几期,我们为大家分享了ChunJun的数据还原.Hive事务表及传输模块的一些内容,本期我们为大家分享ChunJun类加载原理与实现. 本次直播我们将从Java 类加载器解决类冲突基本 ...

  9. 解决RuntimeError: Numpy is not available

    解决RuntimeError: Numpy is not available   这是因为Numpy 版本太高,将现有Numpy卸载 pip uninstall numpy 安装numpy=1.26. ...

  10. Krpano krpanotools 命令行工具包

    PHP Krpano 工具包 集成krpanotools工具命令,不用看官方文档.即可使用的工具包几行代码搞定krpanotools搞定生涩的命令. krpano Tools (Command-Lin ...