当前位置: 首页 > news >正文

liteflow

maven依赖

https://mvnrepository.com/artifact/com.yomahub
artifact-Id 为 liteflow-* 的依赖

基础依赖

liteflow-core                   基础依赖。文档:https://liteflow.cc/pages/8760c4/
liteflow-spring                 spring支持。文档:https://liteflow.cc/pages/0a4573/
liteflow-spring-boot-starter    spring-boot支持。文档:https://liteflow.cc/pages/df6982/
liteflow-solon-plugin           使用solon框架用户。文档:https://liteflow.cc/pages/3df00c/

规则配置源(liteflow-rule-*)

liteflow-rule-sql    使用数据库作为规则配置源。文档:https://liteflow.cc/pages/236b4f/
liteflow-rule-zk     使用zk集群作为规则配置源。文档:https://liteflow.cc/pages/ffc345/
liteflow-rule-nacos  使用Nacos作为规则配置源。文档:https://liteflow.cc/pages/09b776/
liteflow-rule-etcd   使用Etcd作为规则配置源。文档:https://liteflow.cc/pages/4bfac2/
liteflow-rule-apollo 使用Apollo作为规则配置源。文档:https://liteflow.cc/pages/bea809/
liteflow-rule-redis  使用Redis作为规则配置源。文档:https://liteflow.cc/pages/38dcf8/

脚本语言(liteflow-script-*)

liteflow-script-javax       java脚本语言。文档:https://liteflow.cc/pages/2b8afb/
liteflow-script-groovy      groovy脚本语言。文档:https://liteflow.cc/pages/36877b/
liteflow-script-javascript  javascript脚本语言。文档:https://liteflow.cc/pages/07f433/
liteflow-script-qlexpress   qlexpress脚本语言。文档:https://liteflow.cc/pages/19db6d/
liteflow-script-python      python脚本语言。文档:https://liteflow.cc/pages/114982/
liteflow-script-lua         lua脚本语言。文档:https://liteflow.cc/pages/5f0cc7/
liteflow-script-aviator     aviator脚本语言。文档:https://liteflow.cc/pages/bad4b0/
liteflow-script-kotlin      kotlin脚本语言。文档:https://liteflow.cc/pages/7c44ca/

常用组件

普通组件(NodeComponent)
可用关键字:THEN、WHEN 
文档:https://liteflow.cc/pages/8486fb/
选择组件(NodeSwitchComponent)
可用关键字: SWITCH
文档:https://liteflow.cc/pages/c0f5d7/
布尔组件(NodeBooleanComponent)
可用关键字: IF...ELIF...ELSE 、 WHILE...DO... 、 FOR...DO...BREAK 、 WHILE...DO...BREAK 、 ITERATOR...DO...BREAK
文档:https://liteflow.cc/pages/cb0b59/
次数循环组件(NodeForComponent)
可用关键字: FOR...DO...
文档:https://liteflow.cc/pages/5f971f/
迭代循环组件(NodeIteratorComponent)
可用关键字: ITERATOR...DO...
文档:https://liteflow.cc/pages/64262b/

关键字

THEN
依次执行组件。文档:https://liteflow.cc/pages/a590ee/
THEN(a, b, c);   依次执行a、b、c组件
SER
依次执行组件。文档:https://liteflow.cc/pages/a590ee/
SER(a, b, c);   依次执行a、b、c组件
WHEN
并行执行组件。文档:https://liteflow.cc/pages/b3446a/
WHEN(a, b, c)                       同时执行a、b、c组件
WHEN(a, b, c).ignoreError(true)     同时执行a、b、c组件,并忽略异常
WHEN(a, b, c).any(true)             同时执行a、b、c组件,任一组件先执行完即终止其他未完成组件
WHEN(a, b, c).must(a,b)             同时执行a、b、c组件,且a、b组件必须执行,当a、b组件都执行完后c还没执行完则终止执行
SWITCH
选择执行组件。文档:https://liteflow.cc/pages/d90483/
SWITCH(s).to(a, b, c);              根据a组件选择执行b、c、d组件其中的一个。
SWITCH(s).TO(a, b, c).DEFAULT(y);   根据a组件选择执行b、c、d组件其中的一个,并设置默认y组件。
IF
按条件执行组件。文档:https://liteflow.cc/pages/e76999/
IF(i, a)                          组件i 返回 true 时执行 组件a
IF(i, a).ELSE(b);                 组件i 返回 true 时执行 组件a,否则执行 组件b。
IF(i, a, b)                       组件i 返回 true 时执行 组件a,返回false时执行 组件b。
IF(i1, a).ELIF(i2, b).ELSE(c);    组件i1 返回 true 时执行 组件a,组件i2 返回 true 时执行 组件b,否则执行 组件c。

FOR

for循环。文档:https://liteflow.cc/pages/fbf715/
FOR(5).DO(a);                   循环执行5次 组件a。循环次数可通过for循环组件提供。
FOR(5).parallel(true).DO(a);    并行执行5次 组件a

WHILE

while循环。文档:https://liteflow.cc/pages/fbf715/
WHILE(i).DO(a);                 布尔组件i 返回true 时执行 组件a,当 布尔组件i 返回false时跳出循环。
WHILE(i).parallel(true).DO(a);  并行执行 组件a

ITERATOR

迭代器循环。文档:https://liteflow.cc/pages/fbf715/
ITERATOR(iter).DO(a);                    通过 迭代器组件iter 循环 组件a
ITERATOR(iter).parallel(true).DO(a);     并行执行 组件a

BREAK

退出循环。文档:https://liteflow.cc/pages/fbf715/
FOR(f).DO(a).BREAK(i);      布尔组件返回true退出循环
WHILE(w).DO(a).BREAK(i);    布尔组件返回true退出循环

CATCH

捕获异常。文档:https://liteflow.cc/pages/fbf715/
CATCH(a).DO(b)              a组件 抛出异常 则执行 b组件
CATCH(a)                    a组件 抛出异常 不做任何处理

AND

布尔组件的与逻辑。文档:https://liteflow.cc/pages/a8b344/
AND(a,b)                a、b组件都为true时为true

OR

布尔组件的或逻辑。文档:https://liteflow.cc/pages/a8b344/
OR(a,b)                a、b组件有一个为true时为true

NOT

布尔组件的非逻辑。文档:https://liteflow.cc/pages/a8b344/
NOT(a)                a组件为true时为false

PRE

前置节点,只能用在 THEN 内,位置不限。文档:https://liteflow.cc/pages/9f93be/
THEN(a,PRE(b, c),d);        先依次执行b、c组件,再依次执行a、d组件。

FINALLY

后置节点,只能用在 THEN 内,位置不限。文档:https://liteflow.cc/pages/9f93be/
FINALLY(a,PRE(b, c),d);    先依次执行a、d组件,再依次执行b、c组件。

嵌套语法

当 s组件 返回 a 时执行 a组件,当 s组件 返回 t1 时执行 THEN(b, c) 分支,
    SWITCH(s).to(a, THEN(b, c).id("t1"))
当 s组件 返回 a 时执行 a组件,当 s组件 返回 tag:t1 或 :t1 时执行 THEN(b, c) 分支,
    SWITCH(s).to(a, THEN(b, c).tag("t1"))
子流程,先同时执行 a、b组件,再同时执行c、d组件。
    <chain name="mainChain">THEN(chain1,chain2);</chain><chain name="chain1">WHEN(a, b);</chain><chain name="chain2">WHEN(c, d);</chain>

flow.xml 基础格式

<?xml version="1.0" encoding="UTF-8"?>
<flow><nodes><node id="a" class="com.example.demo1.component.ACmp"/><node id="b" class="com.example.demo1.component.BCmp"/></nodes><chain name="mainChain">THEN(a,b);</chain>
</flow>

java 加载xml及执行

        LiteflowConfig config = new LiteflowConfig();config.setRuleSource("config/flow.xml");FlowExecutor flowExecutor = FlowExecutorHolder.loadInstance(config);LiteflowResponse response = flowExecutor.execute2Resp("mainChain", "arg", DefaultContext.class);System.out.println(response);

参数

tag
配置数据
    THEN(a.tag("1"));
获取数据
    String tag = this.getTag();
data
配置数据
    cmpData = '{"name":"jack","age":27,"birth":"1995-10-01"}';THEN(a.data(cmpData));
获取数据
    Entity cmpData = this.getCmpData(Entity.class);
bind
配置数据
    THEN(a.bind("k1", "testValue"), b);// 绑定动态数据,绑定的数据为 调用流程时 添加的 上下文对象 属性。THEN(a.bind("k1", "${orderCode}"), b);
获取数据
    String bindValue = this.getBindData("k1", String.class);

其他语法

重试语法
使用 retry关键字 可以作用于组件上、子流程上、任意表达式上、表达式变量上等
THEN(a, b.retry(3));   b组件 发生异常时 自动 重试 3 次。
THEN(a, b).retry(3, "java.lang.NullPointerException");   绑定指定异常重试,可指定多个异常。
超时语法
使用 maxWaitSeconds和maxWaitMilliseconds关键字对任意的组件、表达式、流程进行超时控制。
THEN(a,b).maxWaitSeconds(5);  指定流程超时时间
WHEN(a.maxWaitSeconds(2));    指定组件超时时间
链路继承
可以在某个chain中使用extends属性来指明该chain继承自哪个chain。在被继承的chain中,需要预留出一个或多个占位符,以便于子chain可以对其进行扩展;而在子chain中,需要对被继承的父chain中的所有占位符进行实现。
<chain id="base">THEN(a, b, {{0}}, {{1}});
</chain>
<chain id="implA" extends="base">{{0}}=IF(c, d, e);{{1}}=SWITCH(f).to(j,k);
</chain>

等同于如下:

<chain id="implA">THEN(a, b, IF(c, d, e), SWITCH(f).to(j,k));
</chain>
验证规则
boolean isValid = LiteFlowChainELBuilder.validate("THEN(a, b, h)");
ValidationResp resp = LiteFlowChainELBuilder.validateWithEx("THEN(a, b, h)");
if (!resp.isSuccess()){log.error(resp.getCause());
}
数据上下文

配置上下文数据对象

LiteflowResponse response = flowExecutor.execute2Resp("chain1", 流程初始参数, OrderContext.class, UserContext.class, SignContext.class);

获取上下文数据对象

OrderContext orderContext = this.getContextBean(OrderContext.class);
UserContext userContext = this.getContextBean(UserContext.class);
SignContext signContext = this.getContextBean(SignContext.class);
//用表达式获取参数,省略Context获取匹配到的第一个
String userCode = this.getContextValue("userCode");
String userCode = this.getContextValue("userContext.userCode");
//假设userList是一个List属性,可以按照下标去取
String a = this.getContextValue("userList.get(0)");
//假设dataMap是一个Map属性
String b = this.getContextValue("dataMap.get('key')");
//假设nameArray是一个数组
String c = this.getContextValue("nameArray[0]");
//用表达式设置参数
this.setContextValue("setDesc", "hello" );
流程入参
//第二个参数为流程入参,可以是任何对象
public LiteflowResponse execute2Resp(String chainId, Object param, Class<?>... contextBeanClazzArray)
//获取流程入参
Bean requestBean = this.getRequestData();    
http://www.lryc.cn/news/622284.html

相关文章:

  • kubernetes(4) 微服务
  • C#文件复制异常深度剖析:解决“未能找到文件“之谜
  • 大白话解析 Solidity 中的防重放参数
  • 大白话解析 Solidity 中的数据位置关键字 memory
  • [激光原理与应用-284]:理论 - 波动光学 - 无线电波,无线通信的频谱
  • 人工智能与社会治理:从工具到生态的范式重构
  • 数据民主化×智能进阶化:AI+BI不可逆的决策革命已至
  • Python 高级语法与用法详解 —— 提升编程效率与代码质量
  • JUC LongAdder并发计数器设计
  • Manus AI与多语言手写识别
  • 项目生命周期
  • stream流debug
  • 源码分析mcp定义tools映射到LLM输入的过程
  • L4 级别自动驾驶 软件架构设计
  • Midjourney绘画创作入门操作
  • 二十四、Mybatis-基础操作-删除(预编译SQL)
  • 什么是可信空间的全域节点、区域节点、业务节点?
  • 基于STM32与边缘计算的工业设备异常振动预警系统设计
  • Pytest 插件使用指南:让你的测试更高效
  • 深度解读 Browser-Use:让 AI 驱动浏览器自动化成为可能
  • 如何回答研究过MQ的源码吗
  • week1-[顺序结构]大海
  • Centos7 服务管理
  • SpatialVLM和SpatialRGPT论文解读
  • ChatGPT-5(GPT-5)全面解析:一场从通用智能迈向专属智能的进化风暴,正在重塑人类与机器的协作边界
  • C#---StopWatch类
  • 【JAVA高级】实现word转pdf 实现,源码概述。深坑总结
  • 用matlab实现的svdd算法
  • 数据库(3)
  • Java学习day_12之面向对象进阶(抽象类接口内部类)