LiteFlow 流程引擎

LiteFlow 流程引擎

开源地址:https://gitee.com/dromara/liteFlow
文档:https://liteflow.yomahub.com/pages/724bc3/
公司也有类似框架,但是功能没有这么丰富,也算学习下设计吧。

适合那些场景

1:逻辑链路比较长,逻辑比较多的业务场景。
2:可以作为一个架构设计,贯穿到整个业务设计中,让业务更加解耦,代码可维护性更高。

上下文的传递

1:通过TreadLocal 传递,但是只能单线程,多线程节点处理比较复杂,无法拿到上下文。而且流程结束要及时清理上下文。不然导致bug,而且很难发现。
2:每次流程入口都通过创建上下文对象,这个模式简单,在流程编排比较简单时候,直接按照业务维护上下文。
但是面对复杂的流程编排的场景,上线文维护比较麻烦,而且不够优雅。
3:通过令牌桶机制,维护上下文。这也是liteflow采用的方式。

  • DataBus
  • NodeComponent(抽象类,所有的节点都需要继承这个抽象类,多继承场景??)
  • Slot :存储上下文

Slot上下文

作用:每个请求都会有一个solt,solt 维护一个DataBus类然后通过queue来保证线程安全。
LiteFlow 流程引擎_第1张图片
类图如下,
SLOTS是继承DataBus的
1:SLOTS 是系统中正在执行的请求的slot的index 作为key,value就是solt,通过index来传递,保证在多线程的场景下也可以用。
2:QUEUE 是一个取solt的工厂,请求开始,就会从QUEUE取一个号,然后初始化slot,放入SLOTS成员变量里面
solt的类图如下:
LiteFlow 流程引擎_第2张图片

  • metaDataMap 维护一些请求元信息,key的话就是一些定义的常量
  • LiteFlow 流程引擎_第3张图片

FlowBus

FlowBus主要是一些
1:chainMap 是执行链维度的工厂
2:nodeMap 所有节点的Node
LiteFlow 流程引擎_第4张图片

流程逻辑实现

以实现整个逻辑流程为例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BRKJacfg-1661702147591)(https://cdn.nlark.com/yuque/0/2022/svg/653872/1661697701020-9e577514-131a-475a-bc00-7ad2a0743dcb.svg#clientId=u664498d8-4613-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u6b954a95&margin=%5Bobject%20Object%5D&originHeight=449&originWidth=1050&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u37d3169f-b267-4c95-8983-2fcc08dfed3&title=)]
整个流程表示式:

    <chain name="chain1_1">
        THEN(
            A,
            WHEN(
                THEN(B, C),
                THEN(D, E, F),
                THEN(
                    SWITCH(G).to(
                        THEN(H, I, WHEN(J, K)).id("t1"),
                        THEN(L, M).id("t2")
                    ),
                N
                )
            ),
            Z
        );
    </chain>
  • WHEN 节点
  • THEN 节点
  • SWITCH 节点

每种节点都会实现对应的Condition接口
每个节点下又所有的所有执行节点,存放在executableList 中

LiteFlow 流程引擎_第5张图片
最终通过Condition实现了一颗决策树
LiteFlow 流程引擎_第6张图片

选择编排

选择编排是通过SwitchCondition这个类来描述的。通过返回的节点名称或者id来跳转节点的。
LiteFlow 流程引擎_第7张图片
通过switch节点执行,获取下个节点,然后继续后面的逻辑
LiteFlow 流程引擎_第8张图片

并行编排

并行执行,通过线程池执行。
LiteFlow 流程引擎_第9张图片

你可能感兴趣的:(设计模式,流程引擎)