架构设计
轻量级流程编排框架liteFlow_zhousenshan的博客-CSDN博客_流程编排框架
一、 springboot搭建
引入依赖
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-spring-boot-starter</artifactId>
<version>2.8.4</version>
</dependency>
路径规则配置
liteflow:
rule-source: config/flow.el.xml
组件配置
Liteflow希望用户把复杂逻辑拆分成一个个可复用的组件,定义组件需要继承NodeComponent
类,然后实现process
方法就行
同时组件除了必须要实现的process
方法,还有几个可选实现:
isAccess:表示是否进入该节点,可以用于业务参数的预先判断
isContinueOnError:表示出错是否继续往下执行下一个组件,默认为false
isEnd:表示是否立即结束整个流程 ,默认为false,也可以在业务日志里根据业务判断来调用this.setIsEnd(true)来结束整个流程。
你只需定义你的业务组件,之后,在启动时,Liteflow会自动扫描到你定义的所有组件,并进行加载。
@LiteflowComponent(id = "cc", name = "xx")
public class cc extends NodeComponent {
@Override
public void process() {
//实现业务逻辑
}
@Override
public boolean isAccess() {
//这里做你的参数检查,如果没获取到必须的业务参数,就不会进入该组件
//模拟检查结果为true
return true;
}
@Override
public boolean isContinueOnError() {
//报错后继续执行其他节点
return true;
}
@Override
public boolean isEnd() {
return super.isEnd();//默认为false
}
}
编辑规则文件
在Liteflow中,定义了then和when两种线程执行方式。
then代表串行,上面的示例中,bb必须要等cc执行完才能执行。
<flow>
<chain name="test">
THEN(cc,bb);
</chain>
</flow>
when代表并行,示例中,cc,dd同时执行。
<flow>
<chain name="test">
WHEN(cc,bb);
</chain>
</flow>
Liteflow允许你编辑嵌套的流程:
这两条链路是串起来执行的,在xml里,可以写你的组件id,也可以写流程id。
<flow>
<chain name="test">
WHEN(cc,test1);
</chain>
<chain name="test1">
WHEN(bb);
</chain>
</flow>
流程启动
@Component
public class TestFlow{
@Resource
private FlowExecutor flowExecutor;
@Override
public void run(String... args) throws Exception {
//参数为流程ID,无初始流程入参,返回类型为默认上下文泛型的Response
//public LiteflowResponse<DefaultContext> execute2Resp(String chainId)
//第一个参数为流程ID,第二个参数为流程入参。其中流程入参可以在组件中通过this.getRequestData()来 获得。
//public LiteflowResponse<DefaultContext> execute2Resp(String chainId, Object param);
//第一个参数为流程ID,第二个参数为流程入参,第三个参数为自定义的上下文Bean类型
//public <T> LiteflowResponse<T> execute2Resp(String chainId, Object param, Class<T> contextBeanClazz)
Slot slot = flowExecutor.execute2Resp("test");
System.out.println(slot);
}
}
总结
1.引入依赖
2.配置配置文件路径
3.配置组件节点 继承 NodeComponent
4.配置节点执行顺序 配置 flow.el.xml
5.启动流程
@Resource
private FlowExecutor flowExecutor;