网上确实有很多关于 Drools 教程的文章,包括我上一篇的《JAVA规则引擎 Drools 教程》。但是很少有提及 Drools 原理的文章,因此我就深入研究了一下 Drools ,把我理解的实现机制分享给大家。
Drools 最早来源于一个 jboss 的项目,发展到现在成为大家熟知的一个规则引擎框架。
说到 Drools 原理,就必须从 DRL 语言说起。DRL 的相关语法大家可以到 http://docs.jboss.org/drools/release/6.5.0.Final/drools-docs/html_single/index.html#d0e4235 进行学习。
DRL 解释执行流程
Drools 规则是在 java 应用程序上运行的,其要执行的步骤顺序由代码确定。为了实现这一点,Drools 规则引擎将业务规则转换成执行树,如下图所示:
如上图所示,每个规则条件分为小块,在树结构中连接和重用。每次将数据添加到规则引擎中时,它将在与此类似的树中进行求值,并到达一个动作节点,在该节点处,它们将被标记为准备执行特定规则的数据。
规则引擎工作方式
Drools 规则引擎基于 ReteOO 算法(对面向对象系统的Rete算法进行了增强和优化的实现),它将事实(Fact)与规则进行匹配,以推断相应的规则结果,这个过程称之为模式匹配。
规则引擎默认不会在规则评估时立即执行业务规则,除非我们强制指定。当我们到达一个事实(Fact)与规则相匹配的节点时,规则评估会将规则操作与触发数据添加到一个叫作议程(Agenda)的组件中,如果同一个事实(Fact)与多个规则相匹配,就认为这些规则是冲突的,议程(Agenda)使用冲突解决策略(Conflict Resolution strategy)管理这些冲突规则的执行顺序。整个生命周期中,规则评估与规则执行之间有着明确的分割。规则操作的执行可能会导致事实(Fact)的更新,从而与其它规则相匹配,导致它们的触发,称之为前向链接。
参考资料
- http://docs.jboss.org/drools/release/6.5.0.Final/drools-docs/html_single/index.html
: » Drools 原理
原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/tech/java/251723.html