Spring Boot3集成 LiteFlow 实现业务流程编排

科技   2024-10-11 08:08   广东  

LiteFlow 是一个国产的轻量级的 Java 流程编排框架,旨在简化复杂的业务逻辑处理流程。它通过定义节点和流程,将复杂的业务逻辑分解成多个可管理的部分,从而提高代码的可读性和可维护性。

今天松哥和大伙一起来聊下这个工具。

一 什么是 LiteFlow

LiteFlow 是一个基于 Java 的流程编排框架,它允许开发者定义一系列的节点(Node)和流程(Flow),通过这些节点和流程来控制业务逻辑的执行顺序。LiteFlow 的核心思想是将复杂的业务逻辑分解成多个小的、可管理的部分,每个部分负责处理特定的任务。

二 为什么需要 LiteFlow

如果你要对复杂业务逻辑进行新写或者重构,用LiteFlow最合适不过。它是一个编排式的规则引擎框架,组件编排,帮助解耦业务代码,让每一个业务片段都是一个组件。

利用 LiteFlow,你可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件之间的流转全靠规则来驱动。LiteFlow 拥有开源规则引擎最为简单的 DSL 语法。十分钟就可上手。

而且这些组件可以实时热更替,也可以给编排好的逻辑流里实时增加一个组件,从而改变你的业务逻辑。

2.1 LiteFlow 适用场景

LiteFlow 适用于拥有复杂逻辑的业务,比如说价格引擎,下单流程等,这些业务往往都拥有很多步骤,这些步骤完全可以按照业务粒度拆分成一个个独立的组件,进行装配复用变更。使用 LiteFlow,你会得到一个灵活度高,扩展性很强的系统。因为组件之间相互独立,也可以避免改一处而动全身的这样的风险。

2.2 LiteFlow 不适用场景

LiteFlow 只做基于逻辑的流转,而不做基于角色任务的流转。如果你想做基于角色任务的流转的工作流,推荐使用 Flowable,可以参考松哥的 TienChin 项目:TienChin 项目实战

三 LiteFlow 实践

假设我现在有一个用户下单的需求,下单步骤我简化成以下几个步骤:

  1. 身份验证:验证用户的身份信息,确保操作的安全性。
  2. 库存检查:检查商品是否有足够的库存来满足订单需求。
  3. 价格确认:再次确认商品的价格,防止因促销活动结束等原因导致的价格变动。
  4. 创建订单:如果所有条件都满足,服务器会在数据库中创建一条新的订单记录。
  5. 支付处理:根据用户选择的支付方式进行相应的处理,比如跳转到第三方支付平台完成支付。
  6. 库存更新:一旦支付成功,更新商品的库存信息,减少已售出的商品数量。
  7. 订单确认:向用户发送订单确认信息,包括订单号、预计发货时间等。

其中 1、5 属于用户节点要完成的内容;2、6 属于库存节点要完成的内容;3 属于商品节点要完成的内容;4、7 则属于订单节点要完成的内容。

接下来我就通过 LiteFlow 来和小伙伴们演示如何完成上面的下单过程。

简单期间,我这里就和大家演示前 4 步的流程编排。

3.1 基本用法

首先创建 SpringBoot 工程,引入 LiteFlow 依赖,如下:

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

接下来我们根据前面分析的业务逻辑,创建四个不同的业务节点:

@Component
public class UserNode extends NodeComponent {
    @Override
    public void process() {
        System.out.println("用户身份验证");
    }
}
@Component
public class StorageNode extends NodeComponent {
    @Override
    public void process() {
        System.out.println("库存检查");
    }
}
@Component
public class MerchandiseNode extends NodeComponent {
    @Override
    public void process() {
        System.out.println("价格确认");
    }
}
@Component
public class OrderNode extends NodeComponent {
    @Override
    public void process() {
        System.out.println("订单确认");
    }
}

然后在 classpath 下定义 liteflow.xml 文件对这些流程进行编排:

<?xml version="1.0" encoding="UTF-8"?>
<flow>
    <chain name="orderProcessChain">
        THEN(userNode, storageNode, merchandiseNode, orderNode);
    </chain>
</flow>

接下来在 application.properties 中加载这个 xml 文件,如下:

liteflow.rule-source=classpath:liteflow.xml

接下来就可以使用这个流程了,如下:

/**
 * @author:江南一点雨
 * @site:http://www.javaboy.org
 * @微信公众号:江南一点雨
 * @github:https://github.com/lenve
 * @gitee:https://gitee.com/lenve
 */

@RestController
public class HelloController {

    @Autowired
    FlowExecutor flowExecutor;
    @GetMapping("/hello")
    public void hello() {
        flowExecutor.execute2Resp("orderProcessChain");
    }
}

当我们调用 /hello 接口的时候,就会依次出发前面编排的四个服务。

3.2 条件选择

我们可以定义一个条件选择组件,类似下面这样:

@LiteflowComponent("a")
public class ACmp extends NodeSwitchComponent {

    @Override
    public String processSwitch() throws Exception {
        System.out.println("Acomp executed!");
        return "c";
    }
}

这个方法需要返回 String 类型,就是具体的结果,上面代码示例了选择到了 c 节点。

这个时候我们定义 xml 内容如下:

<chain name="chain1">
    SWITCH(a).to(b, c);
</chain>

这就表示先在 a 中做选择,根据 a 中 processSwitch 方法的返回值,决定去执行 b 还是 c。

3.3 循环

LiteFlow 提供了次数循环组件。返回的是一个 int 值的循环次数。主要用于 FOR...DO... 表达式。

循环组件的定义类似下面这样:

@LiteflowComponent("f")
public class FCmp extends NodeForComponent {
    @Override
    public int processFor() throws Exception {
        //这里根据业务去返回for的结果
    }
}

循环多少次,就看方法的返回值了。

然后定义 xml 文件类似下面这样:

<chain name="chain1">
    FOR(f).DO(THEN(a, b));
</chain>

我觉得这块可以改进下,没必要定义类,直接在 XML 文件中用表达式去描述 FOR 会更好一些。

另外 LiteFlow 也支持迭代、boolean 等组件,也不难,感兴趣的小伙伴可以去看下文档。

四 小结

LiteFlow 是一个强大的流程编排框架,它可以帮助开发者简化复杂的业务逻辑处理。通过定义节点和流程,LiteFlow 使得代码更加模块化和易于管理。无论是简单的任务调度还是复杂的业务流程自动化,LiteFlow 都能提供有效的解决方案。

公众号后台回复 LiteFlow 可以下载本文完整案例。


微服务项目实战

松哥最近把 AI 面试官项目改造成了微服务,并且录制了配套的视频课程。这次真的是 Buff 叠满:

  • Spring Boot3 + Vue3 + 微信小程序
  • AI
  • 微服务项目

手把手带领小伙伴们做一个 AI 面试官微服务项目。

并且我在这个课程中也会和大家分享如何在简历中写微服务项目以及如何跟面试官去讲自己的微服务项目,让简历更靓。

下面我以问答的形式向小伙伴们介绍下微服务版的 AI 面试官项目。

项目介绍

  • 项目技术栈是什么?

AI 面试官项目采用 Spring Boot3 + Vue3 + uni-app 实现,微服务版基于脚手架完成,涉及到的组件有 Nacos、Gateway、OpenFeign 等。其他的技术细节采用了如 MyBatis-Plus、Redis 等等。

  • 课程内容有哪些?

课程分为了四大部分,前三部分是项目的主体内容,第四部分是项目的赠送内容:

  1. 第一部分是 AI 面试官项目主体,这块我会带领大家手把手开发 AI 面试官项目的后台管理功能和小程序功能,这一阶段的工作完成后,大家的小程序就可以部署上线了,这一阶段大概 13 小时左右。
  2. 第二部分我会和大家一起拆解目前市面上主流的微服务项目脚手架,这一阶段通过对项目架构的分析,让大伙不再觉得微服务是一个高大上的东西,微服务项目是一个人人都可以快速掌握的东西。这一部分大约两小时。
  3. 第三部分我会对前面第一部分已经完成的 AI 面试官项目进行微服务化改造,让大家在理解微服务脚手架的基础之上,真正实践一次微服务。这一部分大约两小时。
  4. 第四部分是赠送给大家的,和大家聊一聊目前比较火的 AI 智能体,带领小伙伴们亲手实践几个 AI 智能体,这一部分大约是两小时。
  • 课程适合谁学?

如果你已经把微服务各个组件掌握的滚瓜烂熟,但是却从没做过微服务项目;如果你想拥抱 AI 但是却只会把 AI 当搜索引擎使用;如果你想把 Java 和 AI 结合起来做个小玩意但是却无从下手;如果你想体验一把 Spring Boot3+Vue3 的最新玩法;那么这个项目适合你。

  • 课程不适合谁学?

如果没有 Java 基础,或者不会 SSM 框架,那么不建议学习这个项目。

  • 我学习过程中遇到问题怎么办?

这个课程松哥提供了微信答疑群,所有课程相关的问题,都可以发到群里讨论,我也都会回复的。

  • 课程只有视频资料吗?

这个课程除了视频之外,还有配套的笔记和代码案例,会一同给到大家。

  • 课程会教小程序上线吗?

会教如何上线小程序,包括小程序审核需要注意的问题,都会发到群里,尽力确保每位小伙伴做完的项目都能成功上线。

  • 小程序做出来是什么样子的?
  • 我能不能先看下课程目录?

AI 面试官课程完整目录

关于松哥

9 年程序员生涯,Java 畅销书作者,华为云最具价值专家,华为开发者社区之星,GitHub 知名项目作者。

目前产品有 Java 项目课程、Java 简历指导、1V1 模拟面试等,如有需求欢迎来勾搭。

感兴趣小伙伴加微信备注 ai

课程目前售价 499,感兴趣小伙伴加松哥微信备注 ai。


江南一点雨
一站式Java全栈技术学习平台!
 最新文章