1、什么是规则引擎?
发布日期:2021-06-30 21:43:32
浏览次数:2
分类:技术文章
本文共 1261 字,大约阅读时间需要 4 分钟。
一、什么是规则引擎
当我们在对复杂的业务进行开发时,程序本身逻辑代码和业务代码互相嵌套
、错综复杂
,同时维护成本高
,可拓展性差
。
规则引擎即是:可降低复杂业务逻辑组件复杂性、降低应用程序的维护和可扩展性成本的组件!
如下图:
规则引擎实际上就是一个推理引擎,用于匹配facts(事实,我们可以理解为输入数据)和rules(规则),以推出结论。二、为什么使用规则引擎
背景:业务规则经常变化,系统需依据业务的变化,实现快速
、低成本
的迭代更新。
因此,为了快速、低成本的更新,我们需将逻辑代码
和业务代码
进行解耦:
- 研发人员(不需懂业务)开发维护程序部分,同时测试通过后,后续不会经常变化改动;
- 业务人员可直接管理这些业务规则,同时不需要研发人员的参与。
因此它具有以下优点:
- 业务人员和研发人员各司其职;
- 稳定层和变化层分离,这是一种优秀的设计模式;
- 变化层支持可视化或配置化的方式,快速进行业务规则的增删改操作,甚至支持热插拔和热更新。以减少冗长的开发和测试周期;
- 部分规则引擎甚至带有设计器(如drools),还可解决我们 “简式建模” 的需求。
三、主流规则引擎
市面上主流的规则引擎包括:
序号 | 名称 | 开源情况 | 流行度 | 运行模式 | 备注 |
---|---|---|---|---|---|
1 | llog | 商业 | 非常出名 | / | 价格昂贵,不推荐 |
2 | drools | 开源 | github 3.2k | 嵌入式、分离式 | 支持可视化等整个配套,是一个完整的BMRS系统 (业务规则管理系统),同时其生态很活跃。 |
3 | esayRule | 开源 | github 2.6k | 嵌入式 | 支持yml 、java 、注解 方式配置规则,但是后两者无法实现动态加载。 |
4 | qlexpress | 开源 | github 2.3k | 嵌入式 | 支持java 方式书写规则,且支持动态加载,但加载比较耗时。后续还有Aviato r、Vincio 均是类似性质,故不予赘述。 |
5 | uRule | 商业 | github 1.1k | 嵌入式、分离式 | 除了部分开源外,其他方面基本和drools 差不多,也是一套完整的 BMRS系统 ,且是国内开发,学习和使用门槛更低。 |
6 | logstash | 开源 | 出名 | 分离式 | 它不算规则引擎,但也放这儿了。想到它也是做数据处理,且支持正则 、模式匹配 等简单数据处理。也许某些公司某些场景,就刚刚就能用上。 |
7 | jess | 商业 | 文档巨少 | / | 不推荐 |
8 | jruleengine | 开源 | 国内几乎没咋用 | 嵌入式 | 不推荐 |
9 | jlisa | 商业 | 同上 | / | 不推荐 |
10 | esper | 开源 | github 659 | 嵌入式 | 不推荐 |
11 | 自研 | / | / | / | / |
PS:
顶书
在drools
和esper
权衡下,选择了drools
! 原因是自研需投入大量人力物力,做的稳定好用还需时间,所以自研被否了,而esper热度较低,担心没人维护。美团
在drools
和esayrule
权衡下,选择了activi
^_^!
因此,我们下一篇文章主要看看drools
的一个大体架构,以及踩坑笔记。
如果喜欢本文,请关注公众号:开猿笔记,里面会有持续更新噢!
转载地址:https://localhost01.blog.csdn.net/article/details/110006917 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月20日 08时06分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
利用ffmpeg合并音频和视频
2019-04-30
刷好老毛子系统进不了老毛子系统后台的解决办法
2019-04-30
Parallels Desktop 16 不能联网的解决办法
2019-04-30
SLAM中TUM数据集更改图片名字
2019-04-30
手把手教你--jquery chosen插件的使用和API(html下拉框美化)
2019-04-30
手把手教你--JAVA微信支付(H5支付)
2019-04-30
solr修改schema文件(solr修改配置文件)
2019-04-30
Bootstrap datetimepicker日期时间插件使用方法(日期时间选择器)
2019-04-30
字体图标库(Font Awesome)的使用--绝佳的图标字体库和CSS框架
2019-04-30
select下拉框分组展示插件的使用--(select-mania插件的使用)
2019-04-30
Java 8新特性之--lambda表达式的使用和应用
2019-04-30
Java Lambda表达式的应用--Stream API操作集合框架
2019-04-30
省市区三级联动插件Distpicker--前端实现地区三级联动
2019-04-30
solr的使用详解
2019-04-30
Myslq连接(JDBC)url属性的参数的设置
2019-04-30
关于Java继承,重载及运行的顺序的总结
2019-04-30
关于Spring MVC与前端的交互
2019-04-30