liteflow可以帮助我们快速编排复杂的业务规则,并实现动态的规则更新。

liteflow中,主要有以下几种组件:

  • 普通组件:集成NodeComponent,用于执行具体的业务逻辑;
  • 选择组件:通过业务逻辑选择不同的执行路径;
  • 条件组件:基于条件返回结果,决定下一步的业务流程。

我们通过代码示例来了解每种组件的用法。

// 普通组件示例
@LiteflowComponent("commonNode")
public class CommonNode extends NodeComponent {
    @Override
    public void process() throws Exception {
        // 业务逻辑
        System.out.println("Executing commonNode logic");
    }
}

// 选择组件示例
@LiteflowComponent("choiceNode")
public class ChoiceNode extends NodeSwitchComponent {
    @Override
    public String processSwitch() throws Exception {
        // 根据条件返回不同的节点ID
        return "nextNodeId";
    }
}

// 条件组件示例
@LiteflowComponent("conditionNode")
public class ConditionNode extends NodeIfComponent {
    @Override
    public boolean processIf() throws Exception {
        // 判断条件
        return true;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

EL规则文件

liteflow中,规则文件可以采用XML格式编写,下面是一个简单的规则文件示例。

Spring Boot + liteflow竟然这么好用!_线程池

如何使用EL规则文件
  1. 创建规则文件:将上述规则文件保存为flow.xml,放在项目的resources目录下;
  2. 配置liteflow:在Spring Boot项目中添加liteflow的配置,指定规则文件的位置;
liteflow:
  rule-source: "classpath:flow.xml"
  node-retry: 3
  thread-executor:
    core-pool-size: 10
    max-pool-size: 20
    keep-alive-time: 60
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  1. 编写业务逻辑组件:按照规则文件中的定义,编写相应的组件逻辑。

数据上下文

liteflow中,数据上下文非常重要,它用于参数传递业务逻辑的执行。

我们可以通过以下代码示例了解数据上下文的用法

Spring Boot + liteflow竟然这么好用!_业务逻辑_02

配置详解

在使用liteflow时,我们需要对一些参数进行配置,如规则文件地址、节点重试、线程池参数等。

以下是一个配置示例。

liteflow:
  rule-source: "classpath:flow.xml"  # 指定规则文件的位置
  node-retry: 3  # 节点重试次数
  thread-executor:
    core-pool-size: 10  # 线程池核心线程数
    max-pool-size: 20  # 线程池最大线程数
    keep-alive-time: 60  # 线程存活时间
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

实践案例

接下来,我们来看一个完整的业务实践案例。

在电商场景下,当订单完成后,我们需要同时进行积分发放和消息发送。

这时候,我们可以利用liteflow进行规则编排,处理这些并行任务。

1. 引入依赖

首先,在pom.xml文件中添加liteflow的依赖:

<dependency>
    <groupId>com.yomahub</groupId>
    <artifactId>liteflow-spring-boot-starter</artifactId>
    <version>2.6.5</version>
</dependency>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
2. 增加配置

application.yml文件中添加liteflow的配置:

spring:
  application:
    name: liteflow-demo

liteflow:
  rule-source: "classpath:flow.xml"  # 指定规则文件的位置
  node-retry: 3  # 节点重试次数
  thread-executor:
    core-pool-size: 10  # 线程池核心线程数
    max-pool-size: 20  # 线程池最大线程数
    keep-alive-time: 60  # 线程存活时间
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
3. 编写规则文件

resources目录下创建flow.xml文件,编写规则文件内容:

<flow>
    <parallel>
        <node id="pointNode"/>
        <node id="messageNode"/>
    </parallel>
</flow>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
4. 编写业务逻辑组件

按照规则文件中的定义,编写相应的业务逻辑组件:

@LiteflowComponent("pointNode")
public class PointNode extends NodeComponent {
    @Override
    public void process() throws Exception {
        // 发放积分逻辑
        System.out.println("Issuing points for the order");
    }
}

@LiteflowComponent("messageNode")
public class MessageNode extends NodeComponent {
    @Override
    public void process() throws Exception {
        // 发送消息逻辑
        System.out.println("Sending message for the order");
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
5. 流程触发

当订单完成后,我们需要触发liteflow的流程来执行积分发放和消息发送的逻辑。

我们可以在订单完成的服务方法中添加如下代码:

@Service
public class OrderService {
    
    @Autowired
    private FlowExecutor flowExecutor;
    
    public void completeOrder(Order order) {
        // 完成订单的其他逻辑
        System.out.println("Order completed: " + order.getId());
        
        // 执行liteflow流程
        flowExecutor.execute2Resp("flow", order);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.


性能统计

Spring Boot + liteflow竟然这么好用!_业务逻辑_03


Spring Boot + liteflow竟然这么好用!_线程池_04

总结

Spring Boot + liteflow竟然这么好用!_线程池_05


最后说一句(求关注!别白嫖!)

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。

关注公众号:woniuxgg,在公众号中回复:笔记  就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!