在复杂的业务场景中,工作流引擎是解耦业务逻辑、提升可维护性的核心组件。传统的BPM引擎(如 Activiti、Flowable)虽功能强大,但学习曲线陡峭且资源消耗较大。LiteFlow 作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择。本文将详细讲解 Solon 集成 LiteFlow 的全过程,助你轻松驾驭轻量级流程编排。
一、LiteFlow核心优势
- 轻量嵌入:仅需2个核心JAR包,无数据库依赖
- 规则驱动:基于EL表达式的链式规则配置,变更实时生效
- 组件化设计:业务逻辑封装为可复用组件,支持热插拔
- 高性能:无反射执行,单线程每秒可处理万级任务
- 多类型支持:顺序流、条件分支、循环、嵌套、异步并行
二、Solon 集成实战
准备:添加依赖包
- <dependencies>
- <dependency>
- <groupId>com.yomahub</groupId>
- 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),
- 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设计让开发者能快速上手,而强大的异步并行、嵌套流程等特性又能支撑复杂业务场景。
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |