🫐EL中的重试
版本支持:v2.12.0+
LiteFlow支持在EL层面进行重试次数的设置。用来满足一些失败了需要重试的场景。
# 单个组件的重试
<chain id="chain1">
THEN(a, b.retry(3));
</chain>
以上EL表示,当b这个组件出现任何异常时,会最多自动重试3次。
3次重试中如果有任意一次成功,则正常往下走。如果3次均不成功,则会中断规则,最后LiteflowResponse
结果中的isSuccess
为false,并且结果中带有具体异常信息。
# 表达式的重试
retry
关键字不仅可以作用于组件上,还可以作用于任意表达式上,或者作用于表达式变量上,以下仅为举例:
<chain id="chain1">
THEN(a, b).retry(3);
</chain>
<chain id="chain2">
FOR(c).DO(a).retry(3);
</chain>
<chain id="chain3">
exp = SWITCH(x).to(m,n,p);
IF(f, exp.retry(3), b);
</chain>
# 整个Chain的重试
retry
还可以作用于整个chain上:
<chain id="sub">
THEN(a, b);
</chain>
<chain id="main">
WHEN(x, y, sub.retry(3));
</chain>
# 带指定异常的重试
retry
关键字默认情况下,只要碰到任何异常,都会进行重试。
这里我们也可以指定异常,来完成特定情况下的重试:
<chain id="chain1">
THEN(a, b).retry(3, "java.lang.NullPointerException");
</chain>
上述表达式表示只有抛出NullPointerException
异常的情况下才进行重试,其余的异常都不进行重试,直接中断失败。
异常还可以指定多个:
<chain id="chain1">
THEN(a, b).retry(3, "java.lang.NullPointerException", "java.lang.ArrayIndexOutOfBoundsException");
</chain>
那么只有抛出上述两个异常中的任意一个都会进行重试。
# 特例
如果你的组件中设置了this.setIsEnd(true)
,虽然会抛出一个ChainEndException
,但是这个错无论如何不会导致重试。
因为这个Exception就是要强制中止。不应该被重试。
帮助我们改善此文档 (opens new window)
上次更新: 2024/04/11, 20:54:24