LiteFlow v2.11.1发布!一个高速迭代,社区活跃的新一代规则引擎
LiteFlow介绍
LiteFlow是一个开源编排式规则引擎,能够让你的系统逻辑任意编排,可选用脚本书写逻辑,支持多达6种脚本语言,支持丰富的第三方存储的支持,所有的逻辑和规则均可热变更。设计系统和重构系统的神器。
LiteFlow是Gitee的高star项目,过去一年来保持了非常快的增长趋势。
同时LiteFlow也是国内优秀的社区驱动型开源项目,开源将近3年,目前已经被各大公司应用在核心系统上。特性以及支持度都非常好。社区人数超过3500人。测试用例1500个,质量有保障。
如果你是第一次知道这个项目,可以去官网或相关的主页进行了解:
项目官网:
gitee托管仓库:
https://gitee.com/dromara/liteFlow
github托管仓库:
前言
上一个版本是9月1日发布的,经过了一个半月,LiteFlow新的v2.11.1和大家见面了。
这个版本总共带来了7个大特性,3个增强,2个修复。总计12个issue的更新。
其实这已经比上一个大版本已经有过之而无不及了。
这一切归功于LiteFlow的团队小伙伴们,他们贡献了这个版本中的诸多的特性,感谢他们。尤其这个版本又有2位新成员加入团队,目前团队成员一共有11位,接下来的迭代将会变的更加迅速。
我们在确保新特性推出的同时,项目质量也同样出色。LiteFlow截止到新版本,一共有1515个测试用例,每一个特性的提交,我们每一个成员都会全部通过测试用例,这也是我们每一次发版的底气,测试用例我们是认真的。并且我们的测试用例代码行覆盖率达到了非常高的90%覆盖率。
其实不吹不黑,在拥有1500个测试用例以上的开源项目中,90%的行覆盖率算得上是一个优秀的程度了。
SQL插件支持轮询自动更新模式
LiteFlow支持把规则和脚本存入任意的关系型数据库,由于关系型数据库不像注册中心会进行推送变更,所以一直以来,规则和脚本在数据库中发生改变,是需要开发者自己手动的去刷新的。并且需要每个应用实例都进行刷新。这对开发者来说,是繁琐了点。
所以我们在v2.11.1中推出了数据库自动轮询更新模式。这一切只需要在你原来的配置中加入:
liteflow: rule-source-ext-data-map: ... #是否开启SQL数据轮询自动刷新机制 默认不开启 pollingEnabled: true ...
默认LiteFlow会每1分钟去进行SHA值的对比,由此来判断是否需要更新。
具体使用方式请参考规则文件->SQL数据库配置源
。
WHEN增加must语法
之前WHEN
推出过any
语法,意思是任意一个完成即继续,而忽略其他。但是在社区里有小伙伴碰到真实的场景,需要异步并行中对指定的节点先完成就忽略其他。
为此这次新版本中推出了全新的must
语法,提供在并行编排中更多的多样性。
<chain name="chain1"> THEN( a, WHEN(b, c, d).must(b, c), f ); </chain>
也可以指定一个或多个表达式:
<chain name="chain1"> THEN( a, WHEN(b, THEN(c, d).id("t1"), e).must(b, "t1"), f ); </chain>
具体使用方式请参考EL规则的写法->并行编排->指定任意节点先执行完则忽略其他
。
推出EL表达式的动态组装API
之前LiteFlow推出过动态构建chain的API,类似于这样:
LiteFlowChainELBuilder.createChain().setChainName("chain1").setEL( "THEN(a, b, WHEN(c, d))" ).build();
但是EL表达式还是需要你自己以字符串的方式填入,这并不能算真正意义上动态。
这次我们推出了全新的EL表达式的动态组装API,对于上面的EL,你可以如下进行动态构建:
ThenELWrapper el = ELBus.then( "a","b",ELBus.when("c", "d") ); LiteFlowChainELBuilder.createChain().setChainName("chain1").setEL(el.toEL()).build();
值得一说的是,用java语言构建EL表达式,几乎和EL的写法完全一致。如果你已经熟悉了LiteFlow的规则语法,应该是零成本上手的。
目前API支持了所有的EL语法。具体使用方式请参考用代码构造规则->构造EL
。
链路继承
LiteFlow每一个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="base"> THEN(a, b, {0}, {1}); </chain> <chain id="base2" extends="base"> {0}=THEN(a,b,{3}); {1}=SWITCH(f).to({4},k); </chain> <chain id="implB" extends="base2"> {3}=THEN(a,b); {4}=j; </chain>
如果你有此方面的场景,不妨尝试下继承特性。
具体使用方式请参考高级特性->链路继承
。
组件降级
LiteFlow之前的替补组件
全面升级成组件降级
特性。
组件降级允许你定义各个类型组件的降级组件。新版本提供了@FallbackCmp
注解用于定义。
在EL规则中,如果你用node
关键字包裹组件,便开启了降级特性:
<chain id="chain1"> THEN(node("a"), b, c); </chain>
当a组件不存在时,便会走到用@FallbackCmp
注解定义的降级组件中去。
具体用法请参考高级特定->组件降级
。
支持绝对路径的模糊匹配
LiteFlow对项目内的规则文件的模糊匹配是早就支持的。但是之前的版本一直不支持绝对路径的模糊匹配。
这个版本,我们予以了支持。
你可以使用*
或者**
来模糊匹配多层级的任意名字的文件:
liteflow.rule-source=/data/lf/**/*Rule.xml
如果开启了文件监听功能,还能对模糊路径匹配到的每一个文件进行监听。当文件改变的时候,实现自动刷新功能。是不是很酷。
具体用法请参考规则文件->本地规则文件配置
和高级功能->本地文件监听
。
WHEN线程池隔离
LiteFlow在v2.11.1版本中新推出了一个配置,在执行WHEN中的并行组件时,每一个when的线程池隔离,在运行复杂的嵌套WHEN链路时,这个特性非常有用。可以有效提高运行速度并且避免死锁问题。
你只需要开启这个配置即可,默认是关闭的。
liteflow.when-thread-pool-isolate=true
具体用法请参考EL规则的写法->并行编排->开启WHEN线程池隔离
。
完整的更新列表
特性 #I7Y0Y1 SQL插件支持轮询模式 https://gitee.com/dromara/liteFlow/issues/I7Y0Y1 特性 #I7XAIB WHEN增加must语法 https://gitee.com/dromara/liteFlow/issues/I7XAIB 特性 #I878WV EL表达式动态组装 https://gitee.com/dromara/liteFlow/issues/I878WV 特性 #I7SVZF 支持chain的继承关系特性 https://gitee.com/dromara/liteFlow/issues/I7SVZF 特性 #I7YYLF 组件降级特性 https://gitee.com/dromara/liteFlow/issues/I7YYLF 特性 #I7ZJRH 支持绝对路径的模糊匹配 https://gitee.com/dromara/liteFlow/issues/I7ZJRH 特性 #I883LB when线程池隔离支持 https://gitee.com/dromara/liteFlow/issues/I883LB 增强 #I821F1 检测链路的循环依赖问题 https://gitee.com/dromara/liteFlow/issues/I821F1 增强 #I7G6BB 自定义异步线程池初始化存在并发问题 https://gitee.com/dromara/liteFlow/issues/I7G6BB 增强 #I855YM sql 插件重构 https://gitee.com/dromara/liteFlow/issues/I855YM 修复 #I82M4G 回滚组件无法获得tag的问题 https://gitee.com/dromara/liteFlow/issues/I82M4G 修复 #I7ZMVM 普通组件isContinueOnError和isEnd为true时,process直接抛异常会导致isEnd失效 https://gitee.com/dromara/liteFlow/issues/I7ZMVM
如何加群
LiteFlow的社区群已经有大约3000人以上了。你有任何问题,都可以在群里问。
关于加群的方式,请参考:https://liteflow.cc/pages/73c2c3/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
🔥 rz sz 的替代品 trzsz ( trz / tsz ) 发布 v1.1.4
🔥rz sz 的替代品 trzsz ( trz / tsz ) 发布 v1.1.4,GitHub:https://github.com/trzsz/trzsz 安装指南 在远程服务器上安装 安装用 Go 实现的版本( ⭐ 推荐 ) 请查看 Go 版安装指引:https://trzsz.github.io/cn/go 或者用 Python3 安装 sudo python3 -m pip install --upgrade trzsz 或者用 Python2 安装 sudo python2 -m pip install --upgrade trzsz 或者用 Homebrew 安装 brew update brew install trzsz 或者用 Node.js 安装 sudo npm install -g trzsz 没有sudo权限也可以安装,只要将安装路径 ( 可能是~/.local/bin) 添加到PATH环境变量中即可。 支持的终端 trzsz-ssh(tssh) -- 内置支持 trzsz 的 ssh 客户端( ⭐ 推荐 )。 iTerm2-- ...
- 下一篇
🎉smart-mqtt v0.30 发布,正版授权一步到位
1、smart-mqtt 简介 smart-mqtt,是 smartboot 组织下面向物联网的首款解决方案,它使用 Java 语言开发,提供高效、可靠的 MQTT Broker 服务。 smart-mqtt 的独特优势在于大量设备接入的情况下,仍能保持低延迟和高吞吐量,满足物联网领域严苛的实时性需求。同时,smart-mqtt 为了最大限度地节省硬件成本,采用了高度优化的资源管理策略,降低了系统运行时的 CPU 和内存占用,使企业在保持高性能的同时,大幅降低运维成本。 另外,mqtt 协议天然适合 IM 场景,需要打造企业级 IM 应用,smart-mqtt 同样是一个非常好的选择。 smartboot 开源组织,一个容易被误认为是在 “重复造轮子” 的低调组织。曾获得2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。 该组织内的明星项目包括: smart-socket 历时 5 年精炼出 2 千多行代码,轻松实现百万级长连接的 AIO 通信框架。 smart-http 基于 smart-socket 实现的 HTTP/1.1 web 服务。 smart-serv...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合Redis,开启缓存,提高访问速度