组件重试

LiteFLow从v2.6.0起开始支持组件的重试

其中又分全局重试和单个组件重试,下面一一说明

全局重试

如果需要全局重试,你需要做如下配置:

  1. liteflow.retry-count=3

这表明,如果组件抛出任何异常,会重试3次,如果3次之后依旧异常,那么整条流程结束。

以下几种情况流程会继续:

如果组件里覆盖了isContinueOnError,设为true的话,那流程会继续。

异步流程的话,如果<when>上配置了errorResume="true"的话(默认就是true),则下一个不同并行组会继续。关于errorResume的定义和使用,可以查看同步&异步章节

单个组件重试

LiteFlow还提供了基于单个组件,指定Exception的重试特性,LiteFlow从2.6.0开始提供了@LiteflowRetry标注

你可以在指定的组件上进行标注:

  1. @LiteflowComponent("c")
  2. @LiteflowRetry(5)
  3. public class CCmp extends NodeComponent {
  4. @Override
  5. public void process() {
  6. //do your biz
  7. }
  8. }

那么,这样就表明,如果这个组件有任何异常抛出,则最多重试5遍。如果第5遍重试再不成功,那就会真正抛出你的业务异常

同样,还可以在这个标注上指定一个或者多个异常:

  1. @LiteflowComponent("e")
  2. @LiteflowRetry(retry = 5, forExceptions = {NullPointerException.class,IllegalArgumentException})
  3. public class ECmp extends NodeComponent {
  4. @Override
  5. public void process() {
  6. //do your biz
  7. }
  8. }

这样就表明,如果这个组件抛出的异常是NullPointerException或者IllegalArgumentException(或者是这两个Exception类的子类),则会进行最多5次的尝试,最后一遍再不成功,那就会真正抛出异常。

全局重试和单个组件重试都定义的情况下

如果在2者都定义的情况下,优先取单个组件的重试配置。没有的情况下,再取全局配置。