同步&异步

同步流程块

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

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

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

下面的方式和上面等价

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

异步流程块

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

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

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

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

异步线程池

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

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

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

异步并行组

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

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

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

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

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

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

那么有一个组件抛错,其他组件依旧会执行,整个链路不会中断。

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

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

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

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

如果设为true,或者不配置(不配置默认为true),如果并行组g1中任意一个节点抛出异常,则g2并行组,依旧执行