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简介
  • 🍓项目特性
  • 🧁环境支持

  • 🍟快速开始(Hello world)

  • 🍢配置项

  • 🗂规则文件

  • 🔗常规组件

  • 🧩EL规则的写法

    • 🍄说明
    • 🌴串行编排
    • 🎋并行编排
      • 最基本的例子
      • 和串行嵌套起来(一)
      • 和串行嵌套起来(二)
      • 忽略错误
      • 任一节点先执行完则忽略其他
      • 指定任意节点先执行完则忽略其他
      • 开启WHEN线程池隔离
      • 关于组的概念
    • 🌾选择编排
    • 🌵条件编排
    • 🌳循环编排
    • 🎃捕获异常表达式
    • 🍄与或非表达式
    • 🍁使用子流程
    • 🍂使用子变量
    • 💐复杂编排例子
    • 🌻关于分号
    • 🌰关于注释
    • 🐚组件名包装
    • 🔆验证规则
  • 🌮数据上下文

  • 🛩执行器

  • 🍋脚本组件

  • 🍇声明式组件

  • 🎲用代码动态构造规则

  • 🎨高级特性

  • ⛱测试用例以及示例

  • 🪂性能表现
  • v2.11.X文档
  • 🧩EL规则的写法
铂赛东
2022-06-29
目录

🎋并行编排

# 最基本的例子

如果你要并行执行a,b,c三个组件,你可以用WHEN关键字,需要注意的是,WHEN必须大写。

提示

从v2.11.4开始,你也可以用PAR关键字,和WHEN是等价的。

<chain name="chain1">
    WHEN(a, b, c);
</chain>

# 和串行嵌套起来(一)

接下来,让我们把THEN和WHEN结合起来用,看一个示例:

<chain name="chain1">
    THEN(
        a,
        WHEN(b, c, d),
        e
    );
</chain>

图示

在以上示例里,b,c,d默认并行都执行完毕后,才会执行e。

# 和串行嵌套起来(二)

上面的示例应该很好理解吧,那么再看一个示例:

<chain name="chain1">
    THEN(
        a,
        WHEN(b, THEN(c, d)),
        e
    );
</chain>

图示

# 忽略错误

WHEN关键字提供了一个子关键字ignoreError(默认为false)来提供忽略错误的特性,用法如下:

<chain name="chain1">
    THEN(
        a,
        WHEN(b, c, d).ignoreError(true),
        e
    );
</chain>

图示

以上假设b,c,d中任一一个节点有异常,那么最终e仍旧会被执行。

# 任一节点先执行完则忽略其他

WHEN关键字提供了一个子关键字any(默认为false)用来提供并行流程中,任一条分支先执行完即忽略其他分支,继续执行的特性。用法如下:

<chain name="chain1">
    THEN(
        a,
        WHEN(b, THEN(c, d), e).any(true),
        f
    );
</chain>

图示

以上流程,假设e节点先执行完,那么不管其他分支是否执行完,会立马执行节点f。

# 指定任意节点先执行完则忽略其他

LiteFlow从v2.11.1开始,支持了并行编排中指定节点的执行则忽略其他,WHEN 关键字新增子关键字 must (不可为空),可用于指定需等待执行的任意节点,可以为 1 个或者多个,若指定的所有节点率先完成,则继续往下执行,忽略同级别的其他任务,用法如下:

<chain name="chain1">
    THEN(
        a,
        WHEN(b, c, d).must(b, c),
        f
    );
</chain>

以上流程中,must指定了b,c,则b,c是一定会被执行完毕了,如果b,c执行完毕了后d还未执行完,则忽略,直接执行下一个组件f。

以上是单节点的用法,must还可以指定一个或多个表达式。比如

<chain name="chain1">
    THEN(
        a,
        WHEN(b, THEN(c, d).id("t1"), e).must(b, "t1"),
        f
    );
</chain>

在这个表达式中WHEN里有一个嵌套的THEN,如果需要指定这个表达式,则需要给这个表达式设置一个id,must里需要指定这个id,需要注意的是,must里指定id,需要用引号括起来。

# 开启WHEN线程池隔离

目前liteflow设计里when线程池,如果你不单独设置自定义线程池,那么就会用默认的线程池。而这个线程池,是所有的when共同一个。

LiteFlow从2.11.1开始,提供一个liteflow.when-thread-pool-isolate参数,默认为false,如果设为true,则会开启WHEN的线程池隔离机制,这意味着每一个when都会有单独的线程池。这个特性对于运行复杂的嵌套when时是可以提升运行速度的且规避掉一些锁的问题。

你可以如下配置来开启:

liteflow.when-thread-pool-isolate=true

# 关于组的概念

在以前的版本中,并行编排有组(group)的概念,而在2.8.X版本中,我们去除了组的概念。

用EL表达式,其实你写2个不同的WHEN就是2个组。比如:

<chain name="chain1">
    THEN(
        WHEN(a, b, c, d)
    );
</chain>

以上abcd都在同一个并行组中。

<chain name="chain1">
    THEN(
        WHEN(a, b),
        WHEN(c, d)
    );
</chain>

以上例子,ab是一个并行组,而cd是另一个并行组。

帮助我们改善此文档 (opens new window)
上次更新: 2024/04/09, 18:39:17
🌴串行编排
🌾选择编排

← 🌴串行编排 🌾选择编排→

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