response = flowExecutor.execute2Resp("chain1", "arg");
29 | ```
30 |
31 | ::: tip
32 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[流程上下文](/pages/v2.7.X/16f927/)这一章节。
33 | :::
34 |
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/035.配置项/010.说明.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 说明
3 | date: 2022-06-06 21:36:19
4 | permalink: /pages/v2.7.X/82459b/
5 | ---
6 |
7 | LiteFlow有诸多配置项,但在大多数情况下,你都不是必须得配置,因为系统有默认值。
8 |
9 | 如果你不明白此配置项是干什么用的,那么希望不要改变其默认值。
10 |
11 | 你也可以跳过此大章节,继续看下面的,如果碰到某个配置项的意义时,再来查阅此大章节。
12 |
13 | :::tip
14 |
15 | 以下三章所涵盖的配置项完全一样,只是在不同的架构环境下表现形式不同,为了方便你查看,可以选择你所熟悉的章节进行查看。
16 |
17 | :::
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/040.规则文件/020.本地规则文件配置.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 本地规则文件配置
3 | date: 2022-06-01 11:37:46
4 | permalink: /pages/v2.7.X/a6fd84/
5 | ---
6 |
7 | 在LiteFlow框架中,规则文件是驱动/编排整个流程的关键,用户通过指定rule-source来定位规则文件的本地路径。而rule-source也是LiteFlow框架中必须配置的参数,而其他参数都不是必须的(都有默认值)。
8 |
9 | 以下以Springboot的配置做例子,Spring以及非Spring的环境配置可以详细阅读[配置项](/pages/v2.7.X/82459b/)这章节。
10 |
11 |
12 |
13 | ## 常规配置
14 |
15 | ```properties
16 | liteflow.rule-source=config/flow.xml
17 | ```
18 |
19 |
20 |
21 |
22 | ## 指定多个路径
23 |
24 | 规则文件之间可以用`,`或者`;`隔开:
25 |
26 | ```properties
27 | liteflow.rule-source=config/flow1.xml,config/flow2.xml,config/flow3.xml
28 | ```
29 |
30 | 你也可以使用Spring EL表达式进行模糊匹配,加载多个配置文件:
31 |
32 | ```properties
33 | liteflow.rule-source=config/**/*.xml
34 | ```
35 |
36 | :::tip
37 |
38 | 模糊匹配只限于Springboot/Spring体系中,非Spring环境,模糊匹配不生效
39 |
40 | :::
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/050.用代码动态构造规则/010.说明.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 说明
3 | date: 2022-06-01 13:18:18
4 | permalink: /pages/v2.7.X/182a88/
5 | ---
6 |
7 | LiteFlow从`2.6.8`版本开始支持基于方法链的代码构造链路的特性。
8 |
9 | ::: tip
10 |
11 | 通过代码构造模式,你可以不用写xml/json/yaml的规则文件。用代码来构建规则。
12 |
13 | 事实上,LiteFlow的规则无论是什么格式的,最终底层也是由构造链去构造的。
14 |
15 | :::
16 |
17 | ::: tip 意义
18 |
19 | 提供动态代码构造的API意义在于以下两点:
20 |
21 | * 有些规则并不是在项目启动时就确定的。你可以通过构造模式,以代码形式的方式去动态构造一条链路,也可以去替换一条链路。
22 | * 如果你想把规则的细节点存数据库(而不是存整段规则文件),那么动态代码构造是个不错的选择。只不过,你需要在应用启动时自己写逻辑去读库,然后用动态代码构造API去构造链路。
23 |
24 | :::
25 |
26 | LiteFlow在`2.6.8`中设计了非常简单的构造方法链式API,让你可以很轻松的构造一条链路。
27 |
28 | 并且,这一切同规则文件一样,都是支持平滑热刷新的,你完全不必担心在高并发时更换流程会造成链路错乱的问题。关于平滑热刷新,可以参考[平滑热刷新](/pages/v2.7.X/19c886/)。
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/060.使用详细指南/010.开启和关闭.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 开启和关闭
3 | date: 2022-06-01 13:06:23
4 | permalink: /pages/v2.7.X/202997/
5 | ---
6 |
7 | 对于springboot的项目来说,LiteFLow提供了自动装配功能,在启动时会进行加载规则,扫描组件等初始化行为
8 |
9 | 如果你依赖了,但是不希望生效LiteFlow。则需要在配置文件中配置如下(这里以springboot的配置为例):
10 |
11 | ```properties
12 | liteflow.enable=false
13 | ```
14 |
15 | 这个默认为true,所以希望LiteFlow生效的用户不用关心这个参数。
16 |
17 | :::tip
18 |
19 | 这里说明下,如果enable为false的话,spring上下文中不会去加载`FlowExecutor`,那你自己的类中如果@Autowire了这个,启动时仍会报错。
20 |
21 | enable为false,只是代表不初始化LiteFlow的一些元数据,但并不意味着你设为false了,你项目仍能正常启动。还需要做点变动的。
22 |
23 | :::
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/060.使用详细指南/090.前置后置组件.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 前置后置组件
3 | date: 2022-06-01 13:30:51
4 | permalink: /pages/v2.7.X/bedc2a/
5 | ---
6 |
7 | LiteFlow从2.6.4开始,支持了前置组件和后置组件特性。
8 |
9 | 此特性针对整个链路,在链路之前之后固定执行某些组件。用于业务的前置处理和后置处理。
10 |
11 | 前置组件和后置组件,均为串行节点,目前不支持异步。
12 |
13 | ## 前置组件
14 |
15 | 固定在一个流程开始之前执行某些节点。表达方式为(这里仅以xml样式来举例,其他格式都差不多):
16 |
17 | ```xml
18 |
19 |
20 |
21 |
22 |
23 | ```
24 |
25 | ## 后置节点
26 |
27 | 固定在一个流程结束后执行某些节点,要注意的是后置节点不受Exception影响,即便节点出错,后置节点依旧会执行。
28 |
29 | 表达方式为(这里仅以xml样式来举例,其他格式都差不多):
30 |
31 | ```xml
32 |
33 |
34 |
35 |
36 | ```
37 |
38 | ## 顺序问题
39 |
40 | 为了方便阅读,推荐大家``写在最前面,而``写在最后面。
41 |
42 | 但是从逻辑上来说,LiteFlow会自动进行排序处理,无论你``和``写在哪里,总会优先执行``,最后执行``。
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/060.使用详细指南/110.子流程.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 子流程
3 | date: 2022-06-01 13:34:32
4 | permalink: /pages/v2.7.X/5821d4/
5 | ---
6 |
7 | LiteFlow从`2.3.0`开始支持显式子流程,在xml里配置的节点,可以是节点,也可以是流程id。比如,你可以这么配置
8 |
9 | ```xml
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | ```
20 |
21 | 这样是不是很清晰
22 |
23 | LiteFlow支持无穷的嵌套结构,只要你想的出。可以完成相对复杂的流程。
24 |
25 | :::tip
26 | 如果存在相同名字的节点和流程,优先节点。
27 | :::
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/060.使用详细指南/170.步骤信息.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 步骤信息
3 | date: 2022-06-08 23:58:18
4 | permalink: /pages/v2.7.X/a5728b/
5 | ---
6 |
7 | LiteFlow为执行的过程提供了详细的步骤信息。
8 |
9 | 获取一条流程执行的步骤信息是通过`response`对象来获取的:
10 |
11 | ```java
12 | LiteflowResponse response = flowExecutor.execute("chain1", "初始参数", CustomContext.class);
13 | Map stepMap = response.getExecuteSteps();
14 | ```
15 |
16 | 获取到的是一个KV的数据结构,key就是你的组件ID,value则是一个`CmpStep`对象。
17 |
18 | 在这个对象里,你可以通过以下方法获得你要的数据:
19 |
20 | * `isSuccess`:此组件是否执行成功
21 | * `getNodeId`:获得组件Id
22 | * `getNodeName`:获得组件名称
23 | * `getTimeSpent`:获得组件的耗时,单位为毫秒
24 | * `getException`:获取此组件抛出的异常,如果isSuccess为false的话。但是这里要注意下:有exception,success一定为false,但是success为false,不一定有exception,因为有可能没执行到,或者没执行结束(any的情况)。
25 |
26 | :::tip
27 | 如果你的某一个组件抛出了异常,在默认配置情况下,流程会中断。那么`response.getCause()`和相应组件步骤里的exception都是一致的。且没执行的组件不会有相应步骤信息。
28 | :::
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/060.使用详细指南/190.不同格式规则加载.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 不同格式规则加载
3 | date: 2022-06-01 13:56:19
4 | permalink: /pages/v2.7.X/decf9a/
5 | ---
6 |
7 | 有些小伙伴在配置规则时,因为特殊原因,需要同时加载2种不同的配置,甚至是配置源,比如:
8 |
9 | ```properties
10 | liteflow.rule-source=multipleType/flow.xml,multipleType/flow.json
11 | ```
12 |
13 | 这种模式在正常下会解析失败,但是LiteFLow提供了一个参数去支持这个特性,如果出现不同的类型的配置,需要加上这个属性:
14 |
15 | ```properties
16 | liteflow.support-multiple-type=true
17 | ```
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/060.使用详细指南/220.简单监控.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 简单监控
3 | date: 2022-06-01 14:00:20
4 | permalink: /pages/v2.7.X/9ec64b/
5 | ---
6 |
7 | LiteFlow提供了简单的监控,目前只统计一个指标:每个组件的平均耗时
8 |
9 | 默认每5分钟会打印一次(可以自己调整),并且是根据耗时时长倒序排的。
10 |
11 | 关于监控配置默认的参数如下:
12 |
13 | ```properties
14 | #是否启用监控
15 | liteflow.monitor.enable-log=false
16 | #监控队列的大小
17 | liteflow.monitor.queue-limit=200
18 | #监控延迟多少毫秒打印
19 | liteflow.monitor.delay=300000
20 | #监控每隔多少毫秒打印
21 | liteflow.monitor.period=300000
22 | ```
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/070.示例工程/010.测试用例.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 测试用例
3 | date: 2022-06-01 14:02:31
4 | permalink: /pages/v2.7.X/beadb0/
5 | ---
6 |
7 | 项目提供了丰富的测试用例,截止到2.7.1版本,项目内一共有接近400多个测试用例。几乎涵盖了文档内所有提到的功能点和场景。
8 |
9 | **强烈建议想了解LiteFlow的同学可以去看看测试用例来学会如何在细节点上的配置和使用。**
10 |
11 |
12 | * liteflow-testcase-nospring: 非spring体系的测试用例
13 | * liteflow-testcase-springboot: springboot环境下的测试用例
14 | * liteflow-testcase-springnative: spring原生环境下的测试用例
15 | * liteflow-testcase-declare-component: 声明式组件场景下的测试用例
16 | * liteflow-testcase-script-qlexpress: 基于QLExpress脚本框架的测试用例
17 | * liteflow-testcase-script-groovy: 基于Groovy脚本框架的测试用例
--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/070.示例工程/020.DEMO案例.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: DEMO案例
3 | date: 2022-06-01 14:04:06
4 | permalink: /pages/v2.7.X/73272c/
5 | ---
6 |
7 | 如果你想看一个实际的案例,加深对LiteFlow的理解。可以查看:
8 |
9 | > [完整的带简单业务的案例](https://gitee.com/bryan31/liteflow-example)
10 |
11 | 这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算,建议大家去pull下来,仔细阅读下,这个业务用到了LiteFlow的大部分特性
12 |
13 | 这个示例工程提供了一个简单的界面,供大家测试之用
14 |
15 | 
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/010.Springboot场景安装运行/010.依赖.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 依赖
3 | date: 2022-05-31 23:43:33
4 | permalink: /pages/v2.6.X/2d57d5/
5 | ---
6 |
7 | LiteFlow提供了liteflow-spring-boot-starter依赖包,提供自动装配功能
8 |
9 | ```xml
10 |
11 | com.yomahub
12 | liteflow-spring-boot-starter
13 | 2.6.14
14 |
15 | ```
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/010.Springboot场景安装运行/030.执行.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 执行
3 | date: 2022-05-31 23:44:10
4 | permalink: /pages/v2.6.X/73a9e7/
5 | ---
6 |
7 | 然后你就可以在任意的类中拿到flowExecutor,进行执行链路
8 |
9 | ```java
10 | @Component
11 | public class MainTest{
12 |
13 | @Resource
14 | private FlowExecutor flowExecutor;
15 |
16 | @Test
17 | public void testConfig(){
18 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
19 | }
20 | }
21 | ```
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/020.Spring场景安装运行/010.依赖.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 依赖
3 | date: 2022-06-01 00:11:44
4 | permalink: /pages/v2.6.X/165d6f/
5 | ---
6 |
7 | 针对于使用了Spring但没有使用SpringBoot的项目
8 |
9 | ```xml
10 |
11 | com.yomahub
12 | liteflow-spring
13 | 2.6.14
14 |
15 | ```
16 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/020.Spring场景安装运行/030.执行.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 执行
3 | date: 2022-06-01 00:12:08
4 | permalink: /pages/v2.6.X/47ef69/
5 | ---
6 |
7 | 和SpringBoot的执行方式一样,没有任何区别
8 |
9 | ```java
10 | @Component
11 | public class MainTest{
12 |
13 | @Resource
14 | private FlowExecutor flowExecutor;
15 |
16 | @Test
17 | public void testConfig(){
18 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
19 | }
20 | }
21 | ```
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/030.其他场景安装运行/010.说明.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 说明
3 | date: 2022-06-01 00:14:28
4 | permalink: /pages/v2.6.X/d53ad2/
5 | ---
6 |
7 | LiteFlow在`2.6.11`版本中对模块进行了彻底的拆分,重新开始支持了非spring的场景。
8 |
9 | 虽说Springboot/Spring已经成为了Java项目中的标配,但是为了照顾到启用其他框架的小伙伴(其更重要的原因是强耦合Spring我始终觉得是瑕疵,有点代码洁癖),现在在非Spring体系的环境中也能使用LiteFlow框架带来的便捷和高效。
10 |
11 |
12 |
13 | LiteFlow文档中提到的98%以上的特性功能都能在非Spring体系中生效。其中不生效的特性和功能有:
14 |
15 | - ruleSource的模糊路径匹配特性在非Spring体系下不生效
16 | - LiteflowComponent在非Spring体系下无法使用
17 | - 监控功能在非Spring体系中无法使用
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/030.其他场景安装运行/020.依赖.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 依赖
3 | date: 2022-06-01 00:14:55
4 | permalink: /pages/v2.6.X/9191fb/
5 | ---
6 |
7 | ```xml
8 |
9 | com.yomahub
10 | liteflow-core
11 | 2.6.14
12 |
13 | ```
14 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/030.其他场景安装运行/040.执行.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 执行
3 | date: 2022-06-01 00:15:45
4 | permalink: /pages/v2.6.X/81d136/
5 | ---
6 |
7 | ## 初始化你的FlowExecutor执行器
8 |
9 | 通过以下代码你可以轻易的初始化`FlowExecutor`处理器:
10 |
11 | ```java
12 | LiteflowConfig config = new LiteflowConfig();
13 | config.setRuleSource("base/flow.xml");
14 | FlowExecutor flowExecutor = FlowExecutorHolder.loadInstance(config);
15 | ```
16 |
17 | LiteFlow有很多其他的配置,但非必须,想知道有哪些可以参考Springboot和Spring那两章节的配置一章,有详细的说明。
18 |
19 | :::tip
20 |
21 | 要注意的是,不建议每次执行流程都去初始化`FlowExecutor`,这个对象的初始化工作相对比较重,全局只需要初始化一次就好了。建议在项目启动时初始化或者第一次执行的时候初始化。
22 |
23 | :::
24 |
25 | ## 用FlowExecutor执行
26 |
27 | ```java
28 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
29 | ```
30 |
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/040.规则文件/020.本地规则文件配置.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 本地规则文件配置
3 | date: 2022-06-01 11:34:52
4 | permalink: /pages/v2.6.X/23d0c3/
5 | ---
6 |
7 | 在LiteFlow框架中,规则文件是驱动/编排整个流程的关键,用户通过指定rule-source来定位规则文件的本地路径。而rule-source也是LiteFlow框架中必须配置的参数,而其他参数都不是必须的(都有默认值)。
8 |
9 | 以下以Springboot的配置做例子,Spring以及非Spring的环境配置可以详细阅读`安装和集成`这章节。
10 |
11 |
12 |
13 | ## 常规配置
14 |
15 | ```properties
16 | liteflow.rule-source=config/flow.xml
17 | ```
18 |
19 |
20 |
21 |
22 | ## 指定多个路径
23 |
24 | 规则文件之间可以用`,`或者`;`隔开:
25 |
26 | ```properties
27 | liteflow.rule-source=config/flow1.xml,config/flow2.xml,config/flow3.xml
28 | ```
29 |
30 | 你也可以使用Spring EL表达式进行模糊匹配,加载多个配置文件:
31 |
32 | ```properties
33 | liteflow.rule-source=config/**/*.xml
34 | ```
35 |
36 | :::tip
37 |
38 | 模糊匹配只限于Springboot/Spring体系中,非Spring环境,模糊匹配不生效
39 |
40 | :::
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/050.用代码动态构造规则/010.说明.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 说明
3 | date: 2022-06-01 11:54:31
4 | permalink: /pages/v2.6.X/b2143d/
5 | ---
6 |
7 | LiteFlow从`2.6.8`版本开始支持基于方法链的代码构造链路的特性。
8 |
9 | ::: tip
10 |
11 | 通过代码构造模式,你可以不用写xml/json/yaml的规则文件。用代码来构建规则。
12 |
13 | 事实上,LiteFlow的规则无论是什么格式的,最终底层也是由构造链去构造的。
14 |
15 | :::
16 |
17 | ::: tip 意义
18 |
19 | 提供动态代码构造的API意义在于以下两点:
20 |
21 | * 有些规则并不是在项目启动时就确定的。你可以通过构造模式,以代码形式的方式去动态构造一条链路,也可以去替换一条链路。
22 | * 如果你想把规则的细节点存数据库(而不是存整段规则文件),那么动态代码构造是个不错的选择。只不过,你需要在应用启动时自己写逻辑去读库,然后用动态代码构造API去构造链路。
23 |
24 | :::
25 |
26 | LiteFlow在`2.6.8`中设计了非常简单的构造方法链式API,让你可以很轻松的构造一条链路。
27 |
28 | 并且,这一切同规则文件一样,都是支持平滑热刷新的,你完全不必担心在高并发时更换流程会造成链路错乱的问题。关于平滑热刷新,可以参考[平滑热刷新](/pages/v2.6.X/d0e86d/)。
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/010.开启和关闭.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 开启和关闭
3 | date: 2022-06-01 13:03:03
4 | permalink: /pages/v2.6.X/1f47ae/
5 | ---
6 |
7 | 对于springboot的项目来说,LiteFLow提供了自动装配功能,在启动时会进行加载规则,扫描组件等初始化行为
8 |
9 | 如果你依赖了,但是不希望生效LiteFlow。则需要在配置文件中配置如下(这里以springboot的配置为例):
10 |
11 | ```properties
12 | liteflow.enable=false
13 | ```
14 |
15 | 这个默认为true,所以希望LiteFlow生效的用户不用关心这个参数。
16 |
17 | :::tip
18 |
19 | 这里说明下,如果enable为false的话,spring上下文中不会去加载`FlowExecutor`,那你自己的类中如果@Autowire了这个,启动时仍会报错。
20 |
21 | enable为false,只是代表不初始化LiteFlow的一些元数据,但并不意味着你设为false了,你项目仍能正常启动。还需要做点变动的。
22 |
23 | :::
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/110.子流程.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 子流程
3 | date: 2022-06-01 13:34:12
4 | permalink: /pages/v2.6.X/2be4e2/
5 | ---
6 |
7 | LiteFlow从`2.3.0`开始支持显式子流程,在xml里配置的节点,可以是节点,也可以是流程id。比如,你可以这么配置
8 |
9 | ```xml
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | ```
20 |
21 | 这样是不是很清晰
22 |
23 | LiteFlow支持无穷的嵌套结构,只要你想的出。可以完成相对复杂的流程。
24 |
25 | :::tip
26 | 如果存在相同名字的节点和流程,优先节点。
27 | :::
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/120.隐式子流程.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 隐式子流程
3 | date: 2022-06-01 13:35:04
4 | permalink: /pages/v2.6.X/2777ec/
5 | ---
6 |
7 | LiteFlow支持在一个节点里通过代码调用另外一条流程, 这个流程关系在规则文件中并不会显示。所以这里称之为隐式调用。
8 |
9 | 主流程和隐式子流程共同享有同一个SLOT的数据。所以隐式子流程里也完全可以拿到这个请求中的所有数据。
10 |
11 | 隐式调用可以完成更为复杂的子流程,比如循环调用:
12 |
13 | ```java
14 | @Component("h")
15 | public class HComponent extends NodeComponent {
16 |
17 | @Resource
18 | private FlowExecutor flowExecutor;
19 |
20 | @Override
21 | public void process() {
22 | System.out.println("Hcomponent executed!");
23 | for(int i=0;i<10;i++){
24 | flowExecutor.invoke("strategy1",3, DefaultSlot.class, this.getSlotIndex());
25 | }
26 | }
27 | }
28 | ```
29 |
30 | 这段代码演示了在某个业务节点内调用另外一个流程链的方法
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/170.异常处理机制.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 异常处理机制
3 | date: 2022-06-01 13:50:03
4 | permalink: /pages/v2.6.X/d61011/
5 | ---
6 |
7 | LiteFlow中执行器FlowExecutor支持两种方式来执行一个流程,
8 | 1. execute方法,返回Slot实现类对象,直接抛出异常信息,业务系统自行处理异常;
9 | ```java
10 | public T execute(String chainId, Object param, Class slotClazz,
11 | Integer slotIndex, boolean isInnerChain) throws Exception
12 | ```
13 | 2. execute2Resp方法,返回LiteflowResponse类对象,异常信息包装在LiteflowResponse类中。
14 | ```java
15 | public LiteflowResponse execute2Resp(String chainId, Object param, Class slotClazz, Integer slotIndex,
16 | boolean isInnerChain)
17 | ```
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/190.不同格式规则加载.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 不同格式规则加载
3 | date: 2022-06-01 13:56:16
4 | permalink: /pages/v2.6.X/f67d92/
5 | ---
6 |
7 | 有些小伙伴在配置规则时,因为特殊原因,需要同时加载2种不同的配置,甚至是配置源,比如:
8 |
9 | ```properties
10 | liteflow.rule-source=multipleType/flow.xml,multipleType/flow.json
11 | ```
12 |
13 | 这种模式在正常下会解析失败,但是LiteFLow提供了一个参数去支持这个特性,如果出现不同的类型的配置,需要加上这个属性:
14 |
15 | ```properties
16 | liteflow.support-multiple-type=true
17 | ```
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/220.简单监控.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 简单监控
3 | date: 2022-06-01 13:59:52
4 | permalink: /pages/v2.6.X/4b18be/
5 | ---
6 |
7 | LiteFlow提供了简单的监控,目前只统计一个指标:每个组件的平均耗时
8 |
9 | 默认每5分钟会打印一次(可以自己调整),并且是根据耗时时长倒序排的。
10 |
11 | 关于监控配置默认的参数如下:
12 |
13 | ```properties
14 | #是否启用监控
15 | liteflow.monitor.enable-log=false
16 | #监控队列的大小
17 | liteflow.monitor.queue-limit=200
18 | #监控延迟多少毫秒打印
19 | liteflow.monitor.delay=300000
20 | #监控每隔多少毫秒打印
21 | liteflow.monitor.period=300000
22 | ```
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/070.示例工程/010.测试用例.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 测试用例
3 | date: 2022-06-01 14:01:20
4 | permalink: /pages/v2.6.X/45096f/
5 | ---
6 |
7 | 项目提供了丰富的测试用例,截止到2.6.14版本,项目内一共有接近400个测试用例。几乎涵盖了文档内所有提到的功能点和场景。
8 |
9 | **强烈建议想了解LiteFlow的同学可以去看看测试用例来学会如何在细节点上的配置和使用。**
10 |
11 |
12 | * liteflow-testcase-nospring: 非spring体系的测试用例
13 | * liteflow-testcase-springboot: springboot环境下的测试用例
14 | * liteflow-testcase-springnative: spring原生环境下的测试用例
15 | * liteflow-testcase-declare-component: 声明式组件场景下的测试用例
16 | * liteflow-testcase-script-qlexpress: 基于QLExpress脚本框架的测试用例
17 | * liteflow-testcase-script-groovy: 基于Groovy脚本框架的测试用例
--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/070.示例工程/020.DEMO案例.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: DEMO案例
3 | date: 2022-06-01 14:03:11
4 | permalink: /pages/v2.6.X/3ae932/
5 | ---
6 |
7 | 如果你想看一个实际的案例,加深对LiteFlow的理解。可以查看:
8 |
9 | > [完整的带简单业务的案例](https://gitee.com/bryan31/liteflow-example)
10 |
11 | 这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算,建议大家去pull下来,仔细阅读下,这个业务用到了LiteFlow的大部分特性
12 |
13 | 这个示例工程提供了一个简单的界面,供大家测试之用
14 |
15 | 
--------------------------------------------------------------------------------
/docs/@pages/archivesPage.md:
--------------------------------------------------------------------------------
1 | ---
2 | archivesPage: true
3 | title: 归档
4 | permalink: /archives/
5 | article: false
6 | ---
--------------------------------------------------------------------------------
/docs/PPT.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: PPT获取
3 | date: 2022-07-18 00:54:47
4 | permalink: /pages/8d6666/
5 | ---
6 |
7 | ## 获取方法
8 |
9 | 做PPT的初衷是考虑到社区内的小伙伴都想在公司内部进行培训分享,但是要从文档中总结出一个PPT,需要一定的时间。作者亲自给你们做了PPT。
10 |
11 | 不过要注意的是,PPT注重让大家了解LiteFlow的特性和简单使用,不会深入到实现层面去分析。并且所有的页数都是精心设计。建议40分钟内讲完。整体也不会把每一部分都讲细,需要演讲者自己去补充一些旁白和理解,并结合一些demo案例进行演示,demo案例和测试用例在文档中有提到。
12 |
13 | 分享者可以自己新增一些内容,但是为了版权,请尽量保留作者的署名。
14 |
15 | **领取方法:关注公众号,在公众号内回复`ppt`获取!**
16 |
17 | 
18 |
19 | ## PPT部分页数动图预览
20 |
21 | PPT中含有大量的动态效果,**推荐用播放按钮观看或者进行演讲,效果最佳。**
22 |
23 | 
24 |
25 | 
26 |
27 | 
--------------------------------------------------------------------------------
/docs/专题解释/02.Slot是一个什么样的概念,在框架中起到什么样的作用?.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Slot是一个什么样的概念,在框架中起到什么样的作用?
3 | date: 2023-03-25 21:58:48
4 | permalink: /pages/ad60b4/
5 | ---
6 |
7 | 有使用者肯定发现了,在组件中通过this关键字,可以调用到`this.getSlot()` 这个方法,返回一个slot。
8 |
9 | 那这个Slot是什么呢?在框架中起到什么样的作用?
10 |
11 |
12 |
13 | Slot对象是上下文的一个包装类。每一个请求,都会申请一个新的Slot对象,同时一个请求结束的时候,也会回收这个slot对象。
14 |
15 | LiteFlow框架声称的对于每个请求,上下文之间是隔离的,准确的来说,是Slot之间是隔离的。因为Slot隔离,所以上下文也隔离。上下文是Slot中的一个子项。
16 |
17 |
18 |
19 | 上下文是用来存放组件中产生的业务数据的,而它的包装类Slot里,则存放着一些框架对于这次请求中的元数据。大多数情况下,用户是不需要关心的。
20 |
21 |
22 |
23 | 大部分情况下,用户只要直接获得上下文就可以了。
24 |
25 |
26 |
27 | 值得一提的是,slot的数量可能有些使用者会以为只有1024个,从而认为并发如果超过1024,slot就会分配不过来了。其实不然,LiteFlow框架从很早开始就加入了slot自动扩容的机制,当slot用完的时候,slot就会自动扩容。扩容因子为0.75,也就是说,每次扩容之后的数量为扩容之前的1.75倍。其实使用者是完全不用担心并发大,slot分配不过来的问题。
28 |
--------------------------------------------------------------------------------
/docs/付费社区.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: LF CLUB社区
3 | date: 2024-01-15 00:54:47
4 | permalink: /pages/8d8888/
5 | ---
6 |
7 | LF CLUB是由LiteFlow作者创办的高级付费社区
8 |
9 | LF CLUB能帮助到所有LiteFlow框架的使用者,以及想使用LiteFlow的潜在开发者。
10 |
11 | LF CLUB提供以下服务:
12 |
13 | **1.每周发布一篇LF的解析精华系列。从头开始解析LF,只要跟着星球解析系列走,使用者一定能完全掌握LF。**
14 |
15 | **2.提供答疑服务,会员可以无限制提问,当天必定得到详细的回复和指导建议。**
16 |
17 | **3.每个加入的用户每年提供2次远程一对一答疑,远程协助服务。**
18 |
19 | **4.每1到2天会分享LF目前的进度,以及下一个版本的重点。**
20 |
21 | LF CLUB里能解决你在使用LiteFlow框架时碰到的所有问题,并有系列课程能帮助你深刻理解LiteFlow框架,不同于微信社区,LF CLUB的问题优先级程度是最高的,且答疑非常详细。
22 |
23 | 独家内容帮助深刻理解,不用在其他平台去搜索问题的答案。作者亲授,相当于随时拥有专家在身边,不用再去求助其他人。
24 |
25 | 加入LF CLUB,请扫描以下二维码,或者直接点击图片也可以直达:
26 |
27 |
--------------------------------------------------------------------------------
/docs/加入社区讨论.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 加入社区讨论
3 | date: 2022-06-01 14:45:45
4 | permalink: /pages/73c2c3/
5 | ---
6 |
7 | LiteFlow是轻量,快速,稳定,可编排的组件式流程引擎,自从开源以来,我们收到了很多人的使用反馈,听取这些反馈进行迭代和新特性开发。
8 |
9 | 如果你在使用中有问题,或者想咨询了解,可以加入群聊,我会细心答复每一个人的疑问。
10 |
11 | 由于社区群十分庞大,需要邀请入群,**你可以关注我的微信公众号,点击`个人微信`,加好友时备注`liteflow`,我会拉你入群。**
12 |
13 | 
14 |
15 | 近期新增分群,可以自由扫码加入:
16 |
17 |
18 |
19 | 同时也有QQ群,习惯QQ群的同学可以加群提问和反馈(主要以微信群为主,QQ群回复可能会稍慢)
20 |
21 | QQ群:720789088
--------------------------------------------------------------------------------
/docs/升级到2.7.X说明.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 升级到2.7.X说明
3 | date: 2022-06-28 23:37:14
4 | permalink: /pages/4848b9/
5 | ---
6 |
7 | 2.7.X较2.6.X最大的不同点有2个:
8 |
9 | 1.核心包的包路径有些许变化。但是类名都没变。
10 |
11 | 2.对用户屏蔽了Slot,转而变成了上下文的概念。以前需要你自己自定义slot,现在则是变成了自定义上下文类。你可以把任意的Bean当做上下文传入。
12 |
13 | 如果你想从2.6.X升级到2.7.X,你需要做以下事情:
14 |
15 | * 如果有些类import报红找不到,可以重新import。因为包路径发生了些许改变。
16 | * 以前你的Slot是extend AbsSlot的。现在你需要去掉继承AbsSlot(这个抽象类已经不存在),然后最好重命名你的类变成`XxxxContext`形式。
17 | * 在组件里,以前你需要先取到Slot对象,然后才能获取数据。现在你需要改成取到上下文对象,`this.getContextBean()`这个方法就可以方便的取到上下文。
18 | * 因为Slot概念在2.7.X中对用户隐藏,但是它依旧存在,以前你获取初始参数是在组件内部通过slot.getRequestData()现在最好改成`this.getRequestData()`方法。
19 |
20 | :::tip
21 | 其实很多方法,你依旧可以通过获取Slot对象再去调用获取。但是新版本里已经不推荐了。很多方法现在都可以在组件里通过this关键字去获取了。
22 | :::
--------------------------------------------------------------------------------
/docs/升级到2.9.3说明.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 升级到2.9.X说明
3 | date: 2022-10-07 12:43:18
4 | permalink: /pages/88c2f4/
5 | ---
6 |
7 | 此文档仅适用于从2.9.0/2.9.1/2.9.2升级到2.9.3的指南。如果你处于以前的版本,请看其他升级文档。
8 |
9 |
10 | ## 2.9.X升级到2.9.3的注意事项
11 |
12 | 核心用法上,完全兼容。
13 |
14 | 由于2.9.3升级加强了第三方中间件的存储结构。
15 |
16 | 如果你有用到zk,etcd,数据库来进行存储规则和脚本。那你无法平滑的升级到2.9.3,需要按照以下文档修改你中间件里的结构:
17 |
18 | [SQL数据库配置源](/pages/236b4f/)
19 |
20 | [ZK规则文件配置源](/pages/ffc345/)
21 |
22 | [Etcd配置源](/pages/4bfac2/)
--------------------------------------------------------------------------------
/utils/config.yml:
--------------------------------------------------------------------------------
1 | #批量添加和修改、删除front matter配置文件
2 |
3 | # 需要批量处理的路径,docs文件夹内的文件夹 (数组。映射路径:docs/arr[0]/arr[1] ... )
4 | path:
5 | - docs # 第一个成员必须是docs
6 |
7 | # 要删除的字段 (数组)
8 | delete:
9 | # - test
10 | # - tags
11 |
12 | # 要添加、修改front matter的数据 (front matter中没有的数据则添加,已有的数据则覆盖)
13 | data:
14 | article: false
--------------------------------------------------------------------------------
/utils/modules/fn.js:
--------------------------------------------------------------------------------
1 | // 类型判断
2 | exports.type = function (o){
3 | var s = Object.prototype.toString.call(o)
4 | return s.match(/\[object (.*?)\]/)[1].toLowerCase()
5 | }
6 |
7 | // 修复date时区格式的问题
8 | exports.repairDate = function (date) {
9 | date = new Date(date);
10 | return `${date.getUTCFullYear()}-${zero(date.getUTCMonth()+1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`;
11 | }
12 |
13 | // 日期的格式
14 | exports.dateFormat = function (date) {
15 | return `${date.getFullYear()}-${zero(date.getMonth()+1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}`
16 | }
17 |
18 | // 小于10补0
19 | function zero(d){
20 | return d.toString().padStart(2,'0')
21 | }
--------------------------------------------------------------------------------