Drools 介绍

是一个业务规则管理系统,具有基于前向链和后向链推理的规则引擎,允许对业务规则和复杂事件处理进行快速可靠的评估。规则引擎也是创建专家系统的基本构建块,在人工智能中,专家系统是模拟人类专家决策能力的计算机系统。

Drools 架构

drawio系统架构图 drools架构_优先级

Drools 基本使用

条件语法

rools提供了十二中类型比较操作符:< 、<=、>、>=、==、!=、contains、not contains、memberOf、not
memberOf、matches、not matches,并且这些条件都可以组合使用。

三大函数

insert:往当前workingMemory中插入一个新的Fact对象,会触发规则的再次执行,除非使用no-loop限定;
update:更新
modify:修改,与update语法不同,结果都是更新操作
retract:删除
function:定义一个方法

属性语法

  • date-expires:设置规则的过期时间
  • date-effective:设置规则的生效时间,时间格式同上
  • duration:规则定时,duration 3000 ,3秒后执行规则
  • salience: 用来设置规则执行的优先级,salience 属性的值是一个数字,数字越大执行优先级越高, 同时它的值可以是一个负数。默认情况下,规则的 salience 默认值为 0。如果不设置规则的 salience 属性,那么执行顺序是随机的。
  • timer(1 2)1s 后 每隔两秒执行一次
  • timer(cron:0/1 * * * * ?) // 每一秒执行一次
  • no-loop: 定义当前的规则是否允许多次循环执行,默认是 false允许循环执行,也就是当前的规则只要满足条件,可以无限次执行。在对当前传入workingMemory中的Fact对象进行修改或者个数的增减,比如update方法,这种操作会触发规则的重新匹配执行。如果是true,则规则只执行一次,如果本身的RHS部分有update等触发规则重新执行的操作,也不会再次执行当前规则。
  • lock-on-active: 将lock-on-active属性的值设置为true,可避免因某些Fact对象被修改而使已经执行过的规则再次被激活执行。因为一个规则的重复执行不一定是本身触发的,也可能是其他规则触发的,所以这个是no-loop的加强版
  • global 全局变量
  • enabled 是否启用规则
  • activation-group 规则分组
  • agenda-group 该分组配合auto-focus 使用的

高级语法

  • query 无参数 和有参数 不同用法

参考资料

https://docs.drools.org/