文章插图
上述LiteFlow的编排表达式中,所表达的是下面一个逻辑流:
文章插图
LiteFlow编排表达式支持THEN(同步),WHEN(异步),SWITCH(选择),IF(条件),FOR(次数循环),WHILE(条件循环)等大表达式,每个表达式又有许多扩展关键字可供选用 。
脚本组件支持的Groovy基本和java语法差不多,Groovy语言支持的一切你均可使用 。甚至可以在Groovy语法中额外定义类和方法 。
结论
总的来说,两款框架都能用脚本来定义逻辑片段,在定义逻辑片段层面,Drools使用的是自研语法,LiteFlow使用的是插件式的Groovy,其实个人觉得Groovy更接近java语法,你甚至于可以在其中定义类和方法 。Drools在高级应用中,也可以用规则定义方法,但是我觉得并不那么自然 。
LiteFlow最大的特点是除了定义逻辑片段外,还可以进行全局组件的编排 。而这正是LiteFlow称之为编排式规则引擎的由来 。使用简单的编排语法可以设计出复杂的逻辑流 。支持java和脚本混编 。
和Java的数据交换在Drools的规则中 , 你可以通过import关键字来引入java的一些类包类进行调用 。
【规则引擎深度对比,LiteFlow vs Drools!】在LiteFlow的脚本组件中 , Groovy也可以通过import 来引入java的任何包来调用 。
Drools中 , 可以直接引用到fact对象 。
LiteFlow中,可以直接引用到context对象,context上下文贯穿整个编排链路 。
LiteFlow中,通过@ScriptBean注解,你甚至可以把spring上下文中的bean引入进来直接调用 。利用这个特性,甚至于可以在脚本中调用rpc , 调用数据库dao对象取数据 。这个在Drools里面虽然也可以做到 , 但是要麻烦的多 。
结论
基本都能满足和java的数据交换需求 , 但是LiteFlow在场景上支持的显然更加多一点 。
API以及集成在API调用层面 , Drools需要去定义KieContainer , KBase,KSession一系列对象 。LiteFlow框架只需要使用到LiteFlowExecutor对象 。
Drools支持了编程式接入,但是在springboot中需要自己写很多配置类来去集成 。
LiteFlow不仅支持了编程式接入,在springboot环境下更是提供了自动装配的starer接入方式,连定义LiteFlowExecutor都不需要,直接从上下文中就可以拿到自动装配后的对象进行调用 。
结论
LiteFlow api更加简单,同Springboot集成度更加高 。
侵入性耦合比较Drools需要在java代码里需要用到规则的地方用KSession对象去匹配规则进行调用 。规则和java是分离的 。在调用层面耦合了KSession调用对象 。
LiteFlow的规则和java也是分离的,但是LiteFlow多了组件这一概念,所以在组件层面是需要继承的,但是同时也提供声明式组件的选择,使用声明式的方式耦合相对要减少一些 。在调用层面也需要去调用LiteFlowExecutor对象 。
结论
在耦合度上面,由于LiteFlow提供编排特性,API耦合度相对稍高一些 。Drools耦合少一些 。
规则的学习成本Drools的规则学习成本挺高的 。由于是自研的规则语法,需要一个很全面的熟悉过程 。而且文档全英文 。
LiteFlow的编排规则极其简单,如果你不使用脚本组件的话,基本上10分钟即可上手 。就算使用了groovy脚本,由于groovy非常类似于java,学习成本也非常少 。况且有大量的学习资料可以参阅 。
LiteFlow的文档中英文齐全 , 还有良好的中文社区可以答疑解惑 。
结论
在规则学习成本上,Drools的规则学习曲线比LiteFlow高出不止一丁点 。
是否有语言插件Drools在Eclipse和IDEA上均有插件来做语法的高亮,预检查和提示 。
LiteFlow在IDEA上有插件来做高亮,预检查和提示 。Eclipse上没有 。
结论
考虑到使用eclipse的人几乎很少了 , 基本上2款规则引擎在语言插件上都做到了 。
规则的存储Drools的规则理论上支持你的规则存于任何地方,但这一切都需要你手动去额外完成 。自己去存,自己去取 。
Drools还有款workbeanch的插件,可以将规则存于workbeanch中 。只有这个是不需要自己存取的 。
LiteFlow除了本地规则以外,原生支持将规则存储于任何标准SQL的数据库,还原生支持了Nacos,Etcd,zookeeper等注册中心 。只需要配置一下即可 。除此之外,还提供了扩展接口,方便你自己扩展成任意的存储点 。
结论
LiteFlow的规则存储支持比Drools丰富的多 。
推荐阅读
- Mysql单表访问方法,索引合并,多表连接原理,基于规则的优化,子查询优化
- 真心话大冒险六条规则(真心话大冒险一至六规则图)
- tensorflow-gpu版本安装及深度神经网络训练与cpu版本对比
- MYSQL-->InnoDB引擎底层原理
- 麻将玩法说明(南城麻将玩法规则)
- 使用开源计算引擎提升Excel格式文件处理效率
- 会玩飞行棋怎么进房间(飞行棋的玩法和规则)
- JuiceFS 元数据引擎选型指南
- 实时营销引擎在vivo营销自动化中的实践 | 引擎篇04
- day09-1存储引擎