🥠组件降级
版本支持:v2.11.1+
LiteFlow支持组件降级功能。
如果你在编排时写了一个不存在的组件,通常情况下是会报错的。
比如你的系统中只定义了 A,B,C 三个组件。但是你在规则里这样写:
<chain name="chain1">
THEN(A, B, C, D);
</chain>
由于 D 组件不存在,所以启动时会报错。
组件降级的意义是,当你写了一个不存在的组件时,在运行时会自动路由到你指定的降级组件上,由这个降级组件来代替你不存在的组件执行,这样就不会报错了。
# 使用方法
首先需要在配置文件开启组件降级功能,默认是关闭的:
liteflow.fallback-cmp-enable=true
若想将一个组件声明为降级组件,只需要在组件上添加 @FallbackCmp
注解。
比如可以通过以下方式定义一个普通组件的降级组件 E。
@LiteflowComponent("E")
@FallbackCmp
public class ECmp extends NodeComponent {
@Override
public void process() {
System.out.println("ECmp executed!");
}
}
若想使用降级组件,规则文件需要这么写:
<chain name="chain1">
THEN(A, B, C, node("D"));
</chain>
当组件 D 不存在时,会降级为组件 E 运行。
提示
如果不加 node 关键字,是不会自动路由到降级组件的,所以一定得加。
# 多组件类型的支持
LiteFlow 不仅支持普通组件的降级,对其他组件类型也提供了支持。以下示例分别声明了一个布尔降级组件和次数循环降级组件。
@LiteflowComponent("if1")
@FallbackCmp
public class IfCmp1 extends NodeBooleanComponent {
@Override
public boolean processBoolean() throws Exception {
return false;
}
}
@LiteflowComponent("for1")
@FallbackCmp
public class ForCmp extends NodeForComponent {
@Override
public int processFor() throws Exception {
return 3;
}
}
对于如下的 EL 表达式:
<chain name="chain2">
IF(node("x1"), FOR("x2").DO(node("x3")));
</chain>
当组件 x1、x2 或 x3 不存在时,会分别路由到条件降级组件、次数循环降级组件以及普通降级组件。其他类型的组件也同理。
与或非表达式也可以使用降级组件,如下的 EL 表达式:
<chain name="chain3">
IF(AND(node("x"), a), b);
</chain>
当组件 x 不存在时会路由到条件降级组件。
提示
目前每种类型的组件只允许定义一个降级组件。
帮助我们改善此文档 (opens new window)
上次更新: 2024/04/19, 15:38:14