首页 > 其他分享 >【SpringBoot应用】SpringBoot 引入 liteflow 规则引擎

【SpringBoot应用】SpringBoot 引入 liteflow 规则引擎

时间:2025-01-10 22:55:48浏览次数:1  
标签:SpringBoot when 引擎 规则 组件 上下文 liteflow 节点

一、前言

在日常的开发过程中,经常会遇到一些串行或者并行的业务流程问题,而业务之间不必存在相关性。
在这样的场景下,使用策略和模板模式的结合可以很好的解决这个问题,但是使用编码的方式会使得文件太多,在业务的部分环节可以这样操作,在项目角度就无法一眼洞穿其中的环节和逻辑。
在本文中,将引入规则引擎从全局角度来解决这个问题,这就是今天要介绍的主角 liteflow。

二、liteflow 规则引擎

liteflow 是一个轻巧而且强大的规则引擎,能够实现开箱即用,可以在短时间内就可以完成复杂的规则编排,下图是 liteflow 的整体架构。liteflow 支持较多的规则文件格式,比如 xml/json/yaml, 对于规则文件的存储方式可以有sql/zk/nacos/apollo 等。

liteflow 的使用是从获取上下文开始的,通过数据上下文来解析对应的规则文件,通过 liteflow 执行器来执行对应的链路,每个链路上都有需要执行的业务 node(即节点组件,可以支持多种语言脚本, groovy/js/python/lua等), 各个业务node 之间是独立的。

liteflow 对应的官方网址和依赖如下所示:
liteflow 规则引擎官方网址

https://liteflow.yomahub.com
<dependency>
    <groupId>com.yomahub</groupId>
    <artifactId>liteflow-spring-boot-starter</artifactId>
    <version>2.10.6</version>
</dependency>

liteflow 可以支持如下所示的复杂流程

此外,liteflow 可以支持热部署,可以实时替换或者增加节点,即修改规则文件后可以实时生效。

三、liteflow 的使用方法

3.1 组件

liteflow 的组件在规则文件中即对应的节点,组件对应的种类有很多,具体的如下所示:

普通组件

普通组件需要集成的是 NodeComponent, 可以用在 when 和 then 逻辑中,具体的业务需要在 process 中去执行。同时在 node 节点中,可以覆盖 iaAccess 方法,表示是否进入该节点执行业务逻辑,isContinueOnError 判断在出错的情况下是否继续执行下一个组件,默认为 false。isEnd 方法表示是否终止流程,默认为true。

选择组件

选择组件是通过业务逻辑来判断接下来的动作要执行哪一个节点,类似于 Java中的 switch , 在代码中则需要继承 NodeSwitchComponent 实现 processWitch 方法来处理业务。

# flow 规则表达式 选择组件
SWITCH(a).to(b, c);
# processWitch 表达式需要返回的是 b 或者 c 字符串来执行相应的业务逻辑
# flow 规则表达式 条件组件
IF(x, a, b);

条件组件

条件组件称之为 if 组件,返回的结果是 true 或者 false, 代码需要集成 NodeIfComponent 重写 processIf 方法,返回对应的业务节点,这个和选择组件类似。
在官方文档中,还有次数循环组件,条件循环组件,循环迭代组件,和退出循环组件,作者认为其应用场景比较复杂,可以使用简单的普通组件来替代,毕竟是轻量级的规则引擎,主要作用就是为了编排流程顺序,复杂的场景就升级使用工作流了,所以这里只介绍以上三种组件。

3.2 EL 规则文件

规则文件的编写和组件的使用是对应的,这里使用xml 的形式来编写。

# 文件编排, then 代表串行执行  when 表示并行执行
# 串行编排示例
THEN(a, b, c, d);
# 并行编排示例
WHEN(a, b, c);
# 串行和并行嵌套结合
THEN( a, WHEN(b, c, d), e);
# 选择编排示例
SWITCH(a).to(b, c, d);
# 条件编排示例
THEN(IF(x, a),b );

3.3 数据上下文

在 liteflow 中,数据上下文的概念非常重要,上下文对象起到参数传递的作用,因为不同业务需要的输入输出参数是不同的,所以上下文非常的重要。

# 执行流程时,需要传递el文件,初始化参数以及上下文对象,这里的上下文可以设置多个
LiteflowResponse response = flowExecutor.execute2Resp("chain1", 流程初始参数, CustomContext.class);

因为上下文传入的是一个 class 类型参数,流程参数是可以传入参数的,一般情况下是在第一个节点中,将传入参数设置到上下文对象中。

3.4 参数配置

在 liteflow 中,需要配置的内容有规则文件地址,节点重试(执行报错时可以进行重试,类似于 spring-retry), 流程并行执行线程池参数配置,流程的请求ID配置。

liteflow:
  # 规则文件 失败重试次数 打印执行日志 监控日志
  ruleSource : liteflow/*.el.xml
  retry-count: 0
  print-execution-log: true
  monitor:
    enable-log: true
    period: 300000
  request-id-generator-class: com.platform.orderserver.config.AppRequestIdGenerator
  # 上下文的最大数量槽
  slot-size : 10240
  # 线程数,默认为64
  main-executor-works: 64
  # 异步线程最长等待时间 秒
  when-max-wait-seconds: 15
  # when 节点全局异步线程池最大线程数
  when-max-workers: 16
  # when 节点全局异步线程池队列数
  when-queue-limit: 5120
  # 在启动的时候就解析规则
  parse-on-start: true
  enable: true

四、业务实践

之前介绍了 liteflow 的一些概念,在这里结合一些业务场景来进行演示:
主要使用电商场景的应用,订单完成后,进行积分的发放,消息发送,同时并行发送短信和邮件。

<?xml version="1.0" encoding="UTF-8"?>
<flow>
    <chain name="test_flow">
        THEN(
           prepareTrade, grantScore, sendMq, WHEN(sendEmail, sendPhone)
        );
    </chain>
</flow>

在订单完成之后异步执行,传递参数并执行相应的规则流程。

在正式处理业务流程之前,需要先进行数据的预处理,将流程入参转转换成上下文对象,方便参数的传递和设置。

在具体的业务处理环节,以积分发放为例,可以获取上下文对象进行业务操作,同时也可以重写 isAccess 方法,来判断是否处理该节点。

如上图所示,具体的业务流程都可以抽象成一个 node 节点,存放在 test_flow.el.xml 中进行执行,其它的代码都和积分发放类似,这里就不再赘述,可以参见代码。

五、总结

liteflow 中的绝大部分是在启动时完成的,包括规则解析、注册组件以及组装信息,其执行性能很高,同时也可以打印每个业务环节的耗时以及统计信息。在本文中,介绍了 liteflow 的基本概念,以及具体的使用方法。

来源:juejin.cn/post/7296771770098745344

标签:SpringBoot,when,引擎,规则,组件,上下文,liteflow,节点
From: https://www.cnblogs.com/o-O-oO/p/18664834

相关文章

  • springboot毕设 后疫情时代汽车4S店配件管理系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:自新冠疫情爆发以来,全球各行各业均遭受了前所未有的冲击,汽车4S店行业也不例外。在疫情常态化防控的背景下,汽车4S店面临着配件供应不稳定、库存管理复......
  • springboot毕设 航空订票 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球航空业的迅速发展,航空旅行已成为人们出行的重要方式之一。近年来,互联网技术的不断进步和普及,极大地推动了航空订票系统的数字化转型。传统的......
  • 农业4.0背后的智慧引擎:机器学习助力精准农事决策
    农业4.0背后的智慧引擎:机器学习助力精准农事决策在21世纪的科技浪潮中,农业作为人类生存和发展的基石,正经历着前所未有的变革。从传统的农耕文明到现代化的机械农业,再到如今智能化的农业4.0时代,每一步都凝聚着科技的力量。而在这场变革中,机器学习作为人工智能的重要分支,正逐......
  • 基于SpringBoot的诊所管理系统
    引言  随着社会经济的快速发展和人们健康意识的日益增强,诊所作为基层医疗服务的重要组成部分,面临着越来越高的服务要求和管理挑战。传统的纸质记录、人工管理的方式不仅效率低下,还容易出错,无法满足现代诊所对信息管理的高效性、准确性和安全性的需求。特别是在患者信息管......
  • 基于SpringBoot+Vue的多媒体信息共享平台设计与实现(源码+lw+数据库+讲解)
    文章目录1.文档图片(包含系统结构图+E-R图+用例图等)2.详细视频演示3.系统运行效果介绍4.技术框架4.1前后端分离架构介绍4.3程序操作流程5.项目推荐7.系统测试7.1系统测试的目的7.2系统功能测试8.代码参考9.为什么选择我?10.获取源码1.文档图片(包含系统......
  • 基于SpringBoot+Vue的校车调度管理系统设计与实现(源码+lw+数据库+讲解)
    文章目录1.文档图片(包含系统结构图+E-R图+用例图等)2.详细视频演示3.系统运行效果介绍4.技术框架4.1前后端分离架构介绍4.3程序操作流程5.项目推荐7.系统测试7.1系统测试的目的7.2系统功能测试8.代码参考9.为什么选择我?10.获取源码1.文档图片(包含系统......
  • 基于SpringBoot+Vue实现的艺术馆管理与展览系统(毕业设计源码+论文+PPT+部署)
    文章目录系统运行效果介绍技术框架前后端分离架构介绍程序操作流程系统测试系统测试的目的系统功能测试代码参考为什么选择我?获取源码系统运行效果介绍技术框架前后端分离架构介绍前后端分离架构是一种现代化的系统开发模式,其核心思想是将前端页面的开发与......
  • springboot毕设 婚纱影楼管理系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着婚纱摄影行业的蓬勃发展,婚纱影楼作为记录人生重要时刻的场所,其管理效率和服务质量直接影响到客户的满意度与忠诚度。传统的人工管理模式已难以满......
  • springboot毕设 基建项目管理系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着国家基础设施建设的快速发展,基建项目数量与规模日益扩大,项目管理的复杂性和重要性也随之提升。传统的项目管理方式往往依赖于纸质文档和人工协调,......
  • springboot软件工程课程辅助学习网站源码毕设+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和互联网的广泛普及,教育领域正经历着深刻的变革。软件工程作为计算机科学与技术的重要分支,其课程内容复杂且实践性强,对学生的......