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来保证线程安全。
image.png
类图如下,
SLOTS是继承DataBus的
1:SLOTS 是系统中正在执行的请求的slot的index 作为key,value就是solt,通过index来传递,保证在多线程的场景下也可以用。
2:QUEUE 是一个取solt的工厂,请求开始,就会从QUEUE取一个号,然后初始化slot,放入SLOTS成员变量里面
solt的类图如下:
image.png

  • metaDataMap 维护一些请求元信息,key的话就是一些定义的常量
  • image.png

FlowBus

FlowBus主要是一些
1:chainMap 是执行链维度的工厂
2:nodeMap 所有节点的Node
image.png

流程逻辑实现

以实现整个逻辑流程为例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 中

image.png
最终通过Condition实现了一颗决策树
image.png

选择编排

选择编排是通过SwitchCondition这个类来描述的。通过返回的节点名称或者id来跳转节点的。
image.png
通过switch节点执行,获取下个节点,然后继续后面的逻辑
image.png

并行编排

并行执行,通过线程池执行。
image.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想使用 LiteFlow 绘制流程图,你可以按照以下步骤进行操作: 1. 安装 LiteFlow:你可以通过 npm 或 yarn 来安装 LiteFlow。在项目根目录下运行以下命令: ```bash npm install liteflow ``` 2. 创建一个 Vue 组件来绘制流程图。让我们称之为 `Flowchart.vue`: ```vue <template> <div> <lite-flow :nodes="nodes" :edges="edges" :options="options" ref="flowchart"></lite-flow> </div> </template> <script> import { ref } from 'vue'; import LiteFlow from 'liteflow'; export default { name: 'Flowchart', components: { LiteFlow, }, setup() { const nodes = ref([ { id: 'node1', label: 'Node 1', x: 100, y: 100 }, { id: 'node2', label: 'Node 2', x: 300, y: 100 }, ]); const edges = ref([{ source: 'node1', target: 'node2' }]); const options = ref({ nodeSize: [120, 40], edgeStyle: { type: 'polyline', lineWidth: 2, stroke: '#333', }, }); return { nodes, edges, options, }; }, }; </script> ``` 在这个例子中,我们引入了 LiteFlow 组件,并设置了 `nodes`、`edges` 和 `options` 的响应式变量。`nodes` 数组包含节点的信息,每个节点都有一个唯一的 `id`、`label` 和坐标 (`x` 和 `y`)。`edges` 数组定义了节点之间的连接关系。`options` 对象用于设置流程图的样式和配置。 3. 在你的应用中使用 `Flowchart` 组件: ```vue <template> <div> <Flowchart /> </div> </template> <script> import Flowchart from './Flowchart.vue'; export default { components: { Flowchart, }, }; </script> ``` 确保在你的应用中正确导入和注册了 `Flowchart` 组件。 现在,你就可以使用 LiteFlow 组件来绘制流程图了。根据你的需求,你可以根据 LiteFlow 的文档进一步自定义和配置流程图。 请注意,这只是一个基本的示例,供你入门。你可以根据你的具体要求进行定制和增强。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值