Spring Boot + liteflow竟然这么好用!
liteflow
可以帮助我们快速编排复杂的业务规则,并实现动态的规则更新。
在liteflow
中,主要有以下几种组件:
- 普通组件:集成
NodeComponent
,用于执行具体的业务逻辑;- 选择组件:通过业务逻辑选择不同的执行路径;
- 条件组件:基于条件返回结果,决定下一步的业务流程。
我们通过代码示例来了解每种组件的用法。
java
// 普通组件示例
@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;
}
}
EL规则文件
在liteflow
中,规则文件可以采用XML格式编写,下面是一个简单的规则文件示例。
如何使用EL规则文件
- 创建规则文件:将上述规则文件保存为
flow.xml
,放在项目的resources
目录下; - 配置
liteflow
:在Spring Boot项目中添加liteflow
的配置,指定规则文件的位置;
yaml
liteflow:
rule-source: "classpath:flow.xml"
node-retry: 3
thread-executor:
core-pool-size: 10
max-pool-size: 20
keep-alive-time: 60
- 编写业务逻辑组件:按照规则文件中的定义,编写相应的组件逻辑。
数据上下文
在liteflow
中,数据上下文非常重要,它用于参数传递
和业务逻辑
的执行。
我们可以通过以下代码示例了解数据上下文的用法
配置详解
在使用liteflow
时,我们需要对一些参数进行配置,如规则文件地址、节点重试、线程池参数等。
以下是一个配置示例。
yaml
liteflow:
rule-source: "classpath:flow.xml" # 指定规则文件的位置
node-retry: 3 # 节点重试次数
thread-executor:
core-pool-size: 10 # 线程池核心线程数
max-pool-size: 20 # 线程池最大线程数
keep-alive-time: 60 # 线程存活时间
实践案例
接下来,我们来看一个完整的业务实践案例。
在电商场景下,当订单完成后,我们需要同时进行积分发放和消息发送。
这时候,我们可以利用liteflow
进行规则编排,处理这些并行任务。
1. 引入依赖
首先,在pom.xml
文件中添加liteflow
的依赖:
xml
<dependency>
<groupId>com.yomahubgroupId>
<artifactId>liteflow-spring-boot-starterartifactId>
<version>2.6.5version>
dependency>
2. 增加配置
在application.yml
文件中添加liteflow
的配置:
yaml
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 # 线程存活时间
3. 编写规则文件
在resources
目录下创建flow.xml
文件,编写规则文件内容:
xml
<flow>
<parallel>
<node id="pointNode"/>
<node id="messageNode"/>
parallel>
flow>
4. 编写业务逻辑组件
按照规则文件中的定义,编写相应的业务逻辑组件:
java
@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");
}
}
5. 流程触发
当订单完成后,我们需要触发liteflow
的流程来执行积分发放和消息发送的逻辑。
我们可以在订单完成的服务方法中添加如下代码:
java
@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);
}
}
性能统计
总结
作者:程序员蜗牛
来源:juejin.cn/post/7394790673612718092
来源:juejin.cn/post/7394790673612718092