Drools用来做什么
Drools环境搭建
pom.xml
<dependency>
<groupId>com.github.hongwen1993</groupId>
<artifactId>fast-drools-spring-boot-starter</artifactId>
<version>7.37.0.Final</version>
</dependency>
spring:
drools:
path: classpath:drools/*
#path: D:\\workspace\\zhaolaobao-saas\\zhaolaobao-drools\\src\\main\\resources\\drools\\
# 以流模式运行,还有云模式cloud
mode: stream
# 刷新配置时间
update: 10
Drools模式
1.云模式(Cloud Mode)
云(Cloud)处理模式是默认的处理方式。
在云模式下,不会区分事实和事件,都看成是事实。
(1)没有时间的概念。尽管事件在插入引擎被赋予了时间戳,也不能判断该事件“多大了”,因为没有“现在”的概念。滑动窗(sliding windows)基于“现在”的概念,所以在云模式下无法使用。
(2)无序的事件云。由于事件无序,没有自动的生命周期管理,需要像正常的事实一样显示的删除事件。
2.流模式(Stream Mode)
当处理事件流的时候需要选择流处理模式。
在流模式下:
(1) 插入到引擎里的事件必须是时间顺序的。
(2) 引擎强制性的和使用的会话时钟session clock同步。
Drools语法
基本语法
//包名可以随便取
package 包名
//选择语言
dialect "java";
//同java语法import
import 引入的java类
//定义规则名称,该命名空间唯一
rule 规则名
when
(条件)左手定则(LHS(Left Hand Side))
then
(动作/结果)右手定则(RHS(Right Hand Side))
end
决策表
关键字 | 说明 | 是否必须 |
---|---|---|
RuleSet | 相当于drl文件中的package | 必须,只能有一个。如果没有设置RuleSet对应的值则使用默认值rule_table |
Sequential | 取值为Boolean类型。true表示规则按照表格自上到下的顺序执行,false表示乱序 | 可选 |
Import | 相当于drl文件中的import,如果引入多个类则类之间用逗号分隔 | 可选 |
Variables | 相当于drl文件中的global,用于定义全局变量,如果有多个全局变量则中间用逗号分隔 | 可选 |
RuleTable | 它指示了后面将会有一批rule,RuleTable的名称将会作为以后生成rule的前缀 | 必须 |
CONDITION | 规则条件关键字,相当于drl文件中的when。下面两行则表示 LHS 部分,第三行则为注释行,不计为规则部分,从第四行开始,每一行表示一条规则 | 每个规则表至少有一个 |
ACTION | 规则结果关键字,相当于drl文件中的then | 每个规则表至少有一个 |
NO-LOOP | 相当于drl文件中的no-loop | 可选 |
AGENDA-GROUP | 相当于drl文件中的agenda-group | 可选 |