Liteflow基础

1.组件

1.1 继承式组件

1.1.1 普通组件

  • 组件id命名:不能以数字开头,中间不能有运算符号的出现
  • 继承NodeComponent,可用于THEN和WHEN等关键字
  • 实现process方法

1.1.2 选择组件

  • 继承NodeSwitchComponent
  • 实现processSwitch方法。
@LiteflowComponent("sa")
public class switchCompent extends NodeSwitchComponent {

    @Override
    public String processSwitch() throws Exception {
        System.out.println("SAcomp executed!");
        return "c";
    }
}

1.1.3 布尔组件

  • 继承NodeBooleanComponent
  • 实现processBoolean
@LiteflowComponent("ba")
public class booleanCompent extends NodeBooleanComponent {

    @Override
    public boolean processBoolean() throws Exception {
        //do your biz
        return true;
    }
}

1.1.4 次数循环组件

  • 继承NodeForComponent,需要实现processFor
@LiteflowComponent("fa")
public class forCompent extends NodeForComponent {

    @Override
    public int  processFor() throws Exception {
        // 循环次数
        return 2;
    }
}

FOR(fa).DO(THEN(a, b));

1.1.5 迭代循环组件

  • 继承NodeIteratorComponent,需要实现processIterator
@LiteflowComponent("ia")
public class iteratorCompent extends NodeIteratorComponent {

    @Override
    public Iterator<?> processIterator() throws Exception {
        List<String> list = ListUtil.toList("jack", "mary", "tom");
        return list.iterator();
    }
}
    ITERATOR(ia).DO(THEN(a, b));

1.2 声明式组件

不继承任何类和实现任何接口,普通的类也可以依靠注解来完成LiteFlow组件的声明。

1.2.1 类级别组件

  • 参数必须传入NodeComponent bindCmp这个参数,而且必须是第一个参数。
  • 方法的返回值要和继承式组件里的返回值一致
@LiteflowComponent("c")
public class CCmp{

    @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeType = NodeTypeEnum.COMMON)
    public void processAcmp(NodeComponent bindCmp, String str) {
        System.out.println("ACmp executed!");
    }
}

1.2.2 方法级别式声明

  • 加nodeId参数。相同的组件的方法,都标识成一样的nodeId即可。
@LiteflowComponent
public class CmpConfig {

    @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "a", nodeType = NodeTypeEnum.COMMON)
    public void processA(NodeComponent bindCmp) {
        ...
    }

    @LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "a", nodeType = NodeTypeEnum.COMMON)
    public boolean isAccessA(NodeComponent bindCmp){
        ...
    }

    @LiteflowMethod(value = LiteFlowMethodEnum.ON_SUCCESS, nodeId = "a", nodeType = NodeTypeEnum.COMMON)
    public void onSuccessA(NodeComponent bindCmp){
        ...
    }

    @LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_BOOLEAN, nodeId = "f", nodeType = NodeTypeEnum.BOOLEAN)
    public boolean processF(NodeComponent bindCmp) {
        ...
    }

    @LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "f", nodeType = NodeTypeEnum.BOOLEAN)
    public boolean isAccessF(NodeComponent bindCmp){
        ...
    }

    @LiteflowMethod(value = LiteFlowMethodEnum.ON_SUCCESS, nodeId = "f", nodeType = NodeTypeEnum.BOOLEAN)
    public void onSuccessF(NodeComponent bindCmp){
        ...
    }
}

2.El规则

2.1 串行编排

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

2.2 并行编排

<chain name="chain1">
    WHEN(a, b, c);
    PAR(a, b, c);
</chain>
  • WHEN(b, c, d).ignoreError(true): 忽略错误
  • .any(true): 任一条分支先执行完即忽略其他分支
  • .must(b, c): 指定需等待执行的任意节点

2.3 选择编排

 SWITCH(a).to(b, c, d);
 SWITCH(x).TO(a, b, c).DEFAULT(y): 默认选择到y
  • id语法:
    SWITCH(b).to(
    c,
    THEN(d, e).id("t1")
    )
@Override
    public String processSwitch() throws Exception {
        //do your biz
        return "t1";
    }
  • tag语法:
    SWITCH(b).to(
    c,
    THEN(d, e).tag("t1")
    ),
@Override
    public String processSwitch() throws Exception {
        return "tag:t1";
        //以下这种也是可以的
        return ":t1";
    }

2.4 条件编排

IF(x, a).ELSE(b);
IF(x, a, b); // 等价

2.5 循环编排

<chain name="chain1">
    FOR(f).DO(THEN(a, b)).BREAK(c); // c为布尔组件
  WHILE(w).DO(THEN(a, b)); // 布尔组件
  ITERATOR(x).DO(THEN(a, b));
</chain>
posted @ 2025-05-22 13:22  lwx_R  阅读(75)  评论(0)    收藏  举报