LiteFlow LiteFlow
💒首页
  • v2.13.2(当前版本)
  • What's New

    • 🌈What' s New In LiteFlow v2.13.2?
  • 历史版本

    • v2.12.X
    • v2.11.X
    • v2.10.X
    • v2.9.X
    • v2.8.X
  • 升级指南

    • 🌈2.13.0升级指南
    • 2.12.4升级指南
    • 2.12.0升级指南
    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
👑LF CLUB社区
  • 常见问题
  • 专题解释

    • 如何理解上下文这个概念?
    • Slot是一个什么样的概念,在框架中起到什么样的作用?
💖赞助
🧩插件
🔥PPT
  • 项目介绍
  • 项目成员
  • 更新记录
  • 参与开发
👥加入群聊
🧤谁在使用
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)

广告采用随机轮播方式显示 ❤️成为赞助商
💒首页
  • v2.13.2(当前版本)
  • What's New

    • 🌈What' s New In LiteFlow v2.13.2?
  • 历史版本

    • v2.12.X
    • v2.11.X
    • v2.10.X
    • v2.9.X
    • v2.8.X
  • 升级指南

    • 🌈2.13.0升级指南
    • 2.12.4升级指南
    • 2.12.0升级指南
    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
👑LF CLUB社区
  • 常见问题
  • 专题解释

    • 如何理解上下文这个概念?
    • Slot是一个什么样的概念,在框架中起到什么样的作用?
💖赞助
🧩插件
🔥PPT
  • 项目介绍
  • 项目成员
  • 更新记录
  • 参与开发
👥加入群聊
🧤谁在使用
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)
  • LiteFlow介绍
  • 项目特性
  • 安装和集成

  • 规则文件

  • 用代码动态构造规则

  • 使用详细指南

    • 开启和关闭
    • 同步异步编排
      • 概述
      • 同步流程块
      • 异步流程块
      • 异步线程池
      • 异步并行组
      • 相同异步并行组之间的抛错
      • 不同异步并行组之间的抛错
      • 相同异步并行组之间的抛错
      • 异步任一线程结束即继续
    • 执行器
    • 数据槽
    • 普通组件
    • 条件组件
    • 脚本组件
    • 声明式组件
    • 前置后置组件
    • 组件标签
    • 子流程
    • 隐式子流程
    • 私有投递
    • 组件重试
    • 平滑热刷新
    • 组件切面
    • 异常处理机制
    • 步骤打印
    • 不同格式规则加载
    • When异步线程池
    • 自定义组件执行器
    • 简单监控
  • 示例工程

  • 性能表现
  • v2.6.X文档
  • 使用详细指南
铂赛东
2022-06-01
目录

同步异步编排

# 概述

提示

同步和异步节点的编排在LiteFlow是一个核心概念,这章建议学习LiteFlow的小伙伴仔细看看。涉及了大量核心概念。

# 同步流程块

LiteFlow提供了同步流程块和异步流程块,配置起来非常简单

以下为同步流程块,表示a,b,c,d四个组件会挨个同步执行

<then value="a,b,c,d"/>

下面的方式和上面等价

<then value="a,b"/>
<then value="c,d"/>

# 异步流程块

以下为异步流程块,表示a,b,c,d四个组件会并行执行

<when value="a,b,c,d"/>

当然下面的方式也和上面等价

<when value="a,b"/>
<when value="c,d"/>

# 异步线程池

LiteFlow从2.5.0开始引入了异步流程块的线程池设定

你可以通过这样配置线程池大小以及等待队列

#异步线程池最大线程数
liteflow.when-max-workers=4
#异步线程池等待队列数
liteflow.when-queue-limit=100

# 异步并行组

如果有同学想并行执行a,b,等执行好了,再并行执行c,d,该怎么办呢?

从2.5.0版本开始,引入了group的概念,你只需这么配置就行了

<when group="g1" value="a,b"/>
<when group="g2" value="c,d"/>

LiteFlow规定,2个不同组的when是按照配置的顺序执行的,相同组的when是完全并行的。如果不配,默认组是default,所以不配置组默认就是在同一组内的

# 相同异步并行组之间的抛错

不配置group或者配成一样的,那无论有多少个<when>还是你一个<when>里有配置了多个组件,都是等价的。都会并行执行。

那么有一个组件抛错,其他组件依旧会执行。等到整个when结束后,才会抛错出来。

# 不同异步并行组之间的抛错

如果2个并行组之间,有一组任一节点报错。不想执行下一个并行组怎么办,从2.5.0版本开始,引入了一个参数errorResume,你可以这样配置

<when group="g1" errorResume="false" value="a,b"/>
<when group="g2" value="c,d"/>

上面的配置表示,默认就是false,所以不配置也行,如果g1并行组件a和b有一个执行报错,则第二个<when>不会执行

如果设为true,如果并行组g1中任意一个节点抛出异常,则g2并行组,依旧执行

# 相同异步并行组之间的抛错

思考以下问题,如果有以下流程,第一个并行组出错还继续,第二个出错不继续。那么如果c报错,会走到e么

<when errorResume="true" value="a,b"/>
<when errorResume="false" value="c,d"/>
<then value="e"/>

应该是会走到e,因为他们是相通并行组,LiteFlow会进行合并,合并的话,errorResume会参照第一个来进行。也就等价于:

<when errorResume="true" value="a,b,c,d"/>
<then value="e"/>

所以会走到e

# 异步任一线程结束即继续

LiteFlow从2.6.4开始,支持了异步组件任意一个结束即继续的特性。

如果有以下流程:

<chain name="chain1">
    <when value="a,b,c"/>
    <then value="d"/>
</chain>

表示a,b,c三个并行,但是要等到a,b,c都执行完了,才能执行d。

如果要达成a,b,c任意一个执行完,即执行d,你需要这么配置

<chain name="chain1">
    <when value="a,b,c" any="true"/>
    <then value="d"/>
</chain>

这样就可以达成了。是不是很简单。

思考如下的场景:

<chain name="chain1">
    <when value="a1,b1,c1" any="true"/>
    <when value="a2,b2,c2"/>
    <then value="d"/>
</chain>

如果b1最先执行完,那么会不会接下去执行a2,b2,c2中的某一个?

答案是不会,有可能b1会先执行完,然后直接执行d,然后再进行执行后续的其他节点。

为什么会跳过第二个when呢,因为上面说过了。相同并行组会合并的,并以第一个when上的参数为准,以上就等价于:

<chain name="chain1">
    <when value="a1,b1,c1,a2,b2,c2" any="true"/>
    <then value="d"/>
</chain>

所以换成以上这种形式,是不是就好理解点了?

帮助我们改善此文档 (opens new window)
上次更新: 2022/10/07, 00:22:18
开启和关闭
执行器

← 开启和关闭 执行器→

Theme by Vdoing | Copyright © 2020-2025 铂赛东 | MIT License
沪ICP备18012955号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式