当前位置: 首页 > 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.dtcms.com/a/333468.html

相关文章:

  • CSS从入门到精通完整指南
  • 【学习笔记】Java并发编程的艺术——第8章 Java中的并发工具类
  • Python工具箱系列(六十二)
  • 写作在学习中的重要性
  • 【完整源码+数据集+部署教程】脑部健康状态检测系统源码和数据集:改进yolo11-AIFI
  • 力扣top100(day04-05)--堆
  • **标题:发散创新之力,探索隐私计算的未来**隐私计算,作为当下数字化时代的热门话题,正受
  • MCP简单入门及简单操作案例(高德地图调用实现酒店查询天气查询等[Lima]示范)
  • 在执行部署脚本后,通过 ls -la 命令查看远程服务器文件时,显示的文件所有者是 games 而不是预期的 root 用户
  • 二、DOCKER常用命令
  • 最长递增子序列-dp问题+二分优化
  • Vue 侦听器(watch 与 watchEffect)全解析1
  • 【161页PPT】智慧方案企业数字化转型概述(课件)(附下载方式)
  • pcl法线估计的踩坑
  • 【GPT入门】第47课 大模型量化中 float32/float16/uint8/int4 的区别解析:从位数到应用场景
  • 《P1194 买礼物》
  • PyTorch的安装-CPU版本或者GPU安装有什么区别吗
  • 口播数字人免费API调用方案
  • Docker的相关知识探究详解
  • 【功能更新】“弹性互联网”正式上线Fusion WAN平台
  • Oracle按照特定列值排序和C#统计特定列值的所有行
  • 数据结构:N叉树 (N-ary Tree)
  • 【部署K8S集群】 1、安装前环境准备配置
  • Deepoc具身智能模型如何重塑康复辅助设备
  • Java中MybatisPlus使用多线程多数据源失效
  • 集成电路学习:什么是Image Segmentation图像分割
  • 功能组和功能组状态的概念关系和区别
  • java16学习笔记-Vector API
  • oracle数据库初始化
  • 共探头部设计|安贝斯携手武汉科创协会x深钣协“湖北行”,链动D+M小镇的华中范式