LiteFlow 工作流、异步编排、轻量级工具

1、简介

轻量,快速,稳定,可编排的组件式规则引擎。 拥有全新设计的DSL规则表达式。 组件复用,同步/异步编排,动态编排,支持超多语言脚本,复杂嵌套规则,热部署,平滑刷新规则等等功能,让你加快开发效率!
 

LiteFlow是一个轻量且强大的国产规则引擎框架,可用于复杂的组件化业务的编排领域,独有的DSL规则驱动整个复杂业务,并可实现平滑刷新热部署,支持多种脚本语言规则的嵌入。帮助系统变得更加丝滑且灵活。

LiteFlow于2020年正式开源,直到现在已经是国内开源规则引擎中不可忽视的存在,而且最关键的是,LiteFlow还是一个持续高速迭代的开源项目。

LiteFlow是一个由社区驱动的项目,我们非常重视社区建设,拥有一个5000多人的使用者社区,在使用中碰到任何问题或者建议都可以在社区中反应。

gitee代码地址:https://gitee.com/luodayou/liteFlow

2、解决的痛点

复杂的业务逻辑、多变的条件的系统,维护困难、测试困难,导致不愿意有人维护项目。以至于不得不修改业务逻辑的时候,都是通过打补丁的方式,导致系统更加臃肿、一出问题难以排查。业务的多变导致小版本的不断迭代,其他开发人员接手项目时,感觉压力山大,心中一万只羊驼奔腾而过…

业务多变的条件,可以随时修改,而不改变代码本身。比如根据价格的不同的区间段,返回不同的折扣。

3、快速入门

3.1 引入依赖

<dependency>
    <groupId>com.yomahub</groupId>
    <artifactId>liteflow-spring-boot-starter</artifactId>
    <version>2.13.0</version>
</dependency>

3.2 配置 定义组件

@LiteflowComponent("a")
public class ACmp extends NodeComponent {

	@Override
	public void process() {
		//do your business
	}
}

@LiteflowComponent("b")
public class BCmp extends NodeComponent {

	@Override
	public void process() {
		//do your business
	}
}

@LiteflowComponent("c")
public class CCmp extends NodeComponent {

	@Override
	public void process() {
		//do your business
	}
}

3.3 配置文件配置 SpringBoot配置文件

liteflow.rule-source=config/flow.xml

3.4 规则文件定义

<?xml version="1.0" encoding="UTF-8"?>
<flow>
    <chain name="chain1">
        THEN(a, b, c);
    </chain>
</flow>

3.5 执行

   声明启动类 

@SpringBootApplication
//把你定义的组件扫入Spring上下文中
@ComponentScan({"com.xxx.xxx.cmp"})
public class LiteflowExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(LiteflowExampleApplication.class, args);
    }
}

然后你就可以在Springboot任意被Spring托管的类中拿到flowExecutor,进行执行链路:

@Component
public class YourClass{
    
    @Resource
    private FlowExecutor flowExecutor;
    
    public void testConfig(){
        LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", DefaultContext.class);
    }
}

 4、springboot其他配置

#规则文件路径
liteflow.rule-source=config/flow.xml
#-----------------以下非必须-----------------
#liteflow是否开启,默认为true
liteflow.enable=true
#liteflow的banner打印是否开启,默认为true
liteflow.print-banner=true
#上下文的初始数量槽,默认值为1024,这个值不用刻意配置,这个值会自动扩容
liteflow.slot-size=1024
#FlowExecutor的execute2Future的线程数,默认为64
liteflow.main-executor-works=64
#FlowExecutor的execute2Future的自定义线程池Builder,LiteFlow提供了默认的Builder
liteflow.main-executor-class=com.yomahub.liteflow.thread.LiteFlowDefaultMainExecutorBuilder
#自定义请求ID的生成类,LiteFlow提供了默认的生成类
liteflow.request-id-generator-class=com.yomahub.liteflow.flow.id.DefaultRequestIdGenerator
#全局异步节点线程池大小,默认为64
liteflow.global-thread-pool-size=64
#全局异步节点线程池队列大小,默认为512
liteflow.global-thread-pool-queue-size=512
#全局异步节点线程池自定义Builder,LiteFlow提供了默认的线程池Builder
liteflow.global-thread-pool-executor-class=com.yomahub.liteflow.thread.LiteFlowDefaultGlobalExecutorBuilder
#异步线程最长的等待时间(只用于when),默认值为15000
liteflow.when-max-wait-time=15000
#异步线程最长的等待时间(只用于when),默认值为MILLISECONDS,毫秒
liteflow.when-max-wait-time-unit=MILLISECONDS
#每个WHEN是否用单独的线程池
liteflow.when-thread-pool-isolate=false
#设置解析模式,一共有三种模式,PARSE_ALL_ON_START | PARSE_ALL_ON_FIRST_EXEC | PARSE_ONE_ON_FIRST_EXEC
liteflow.parse-mode=PARSE_ALL_ON_START
#全局重试次数,默认为0
liteflow.retry-count=0
#是否支持不同类型的加载方式混用,默认为false
liteflow.support-multiple-type=false
#全局默认节点执行器
liteflow.node-executor-class=com.yomahub.liteflow.flow.executor.DefaultNodeExecutor
#是否打印执行中过程中的日志,默认为true
liteflow.print-execution-log=true
#是否开启本地文件监听,默认为false
liteflow.enable-monitor-file=false
#是否开启快速解析模式,默认为false
liteflow.fast-load=false
#是否开启Node节点实例ID持久化,默认为false
enable-node-instance-id=false
#监控是否开启,默认不开启
liteflow.monitor.enable-log=false
#监控队列存储大小,默认值为200
liteflow.monitor.queue-limit=200
#监控一开始延迟多少执行,默认值为300000毫秒,也就是5分钟
liteflow.monitor.delay=300000
#监控日志打印每过多少时间执行一次,默认值为300000毫秒,也就是5分钟
liteflow.monitor.period=300000

5、组件

  1. 普通组件

        

选择组件

在实际业务中,往往要通过动态的业务逻辑判断到底接下去该执行哪一个节点,这就引申出了选择节点,选择节点可以用于SWITCH关键字中。

关于SWITCH表达式的用法,可以参考选择编排一章。

选择节点a需要继承NodeSwitchComponent

需要实现方法processSwitch方法。

#根据nodeId进行选择

布尔组件

次数循环组件

迭代循环组件

LiteflowComponent

组件内方法覆盖和调用

6、规则文件配置

7、高级特性

       本地规则文件监听

        

单个文件的监听

首先,在LiteFlow的配置liteflow.rule-source中,不光可以配置项目内的规则文件,其实还可以配置本地磁盘上的文件的,比如:

liteflow.rule-source=/Users/bryan31/liteflow/test/flow.xml

但是当你本地规则文件改变了的情况下,你的项目是无法获知的,你只能通过手动刷新规则去实现热刷新(详细请阅读平滑热刷新)。

现在LiteFlow支持对本地文件的监听配置了。

你只需要配置liteflow.enable-monitor-file=true,即可开启自动对文件的监听特性。文件改动,你的项目无需做任何事,立马自动刷新整个规则。非常方便。

#模糊文件路径的监听   v2.11.1+

如果你用模糊匹配的方式也是可以的,同样也会对匹配的所有文件进行监听。

liteflow.rule-source=/Users/bryan31/liteflow/**/flow*.xml

还是只需要配置liteflow.enable-monitor-file=true即可。

组件降级

版本支持: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 不存在时会路由到条件降级组件。

提示

目前每种类型的组件只允许定义一个降级组件。

官网详细文档  LiteFlow

https://liteflow.cc/pages/8486fb/

更多详细用法和文档在官网,谢谢您的浏览 如对您有帮助辛苦您给个赞和关注 后续有新发现的好工具会分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值