85.4. 决策引擎中的事件处理模式
决策引擎以云模式或流模式运行。在云模式中,决策引擎将事实处理为事实,无时序限制、独立于时间。在流模式中,决策引擎实时或近乎实时限制将事实作为事件处理为事件。流模式使用同步在 Red Hat Decision Manager 中实现事件处理。
- 云模式
云模式是决策引擎的默认操作模式。在云模式中,决策引擎将事件视为无顺序的云。事件仍然存在时间戳,但以云模式运行的决策引擎无法从时间戳中提取,因为云模式会忽略目前的时间。这个模式使用规则约束来查找匹配的元组来激活和执行规则。
云模式不会对事实施加任何额外要求。但是,由于此模式中的决策引擎没有概念,因此无法使用时序功能,如滑动窗口或自动生命周期管理。在云模式中,不再需要时,必须明确指定事件。
在云模式中不会实施以下要求:
- 没有时钟同步,因为决策引擎没有时间
- 没有事件排序,因为决策引擎将事件处理为无顺序的云,因此决策引擎与规则匹配。
您可以通过在相关配置文件中设置系统属性或使用 Java 客户端 API 来指定云模式:
使用系统属性设置云模式
drools.eventProcessingMode=cloud
drools.eventProcessingMode=cloudCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Java 客户端 API 设置云模式
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用特定 Red Hat Decision Manager 项目的 KIE 模块描述符文件(
kmodule.xml)中的eventProcessingMode="<mode>"KIE base 属性来指定云模式:使用项目
kmodule.xml文件设置云模式Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 流模式
流模式使决策引擎能够按照时间处理事件,并在插入到决策引擎中实时处理。在流模式中,决策引擎同步事件流(因此,在不同流中的事件可以按照时间或长度的处理)实施分片,并启用自动生命周期管理。
以下要求适用于流模式:
- 每个流中的事件必须按时间排序。
- 必须存在会话时钟才能同步事件流。
注意您的应用程序不需要强制在流间排序事件,而是使用没有同步的事件流可能会导致意外的结果。
您可以通过在相关配置文件中设置系统属性或使用 Java 客户端 API 来指定流模式:
使用系统属性设置流模式
drools.eventProcessingMode=stream
drools.eventProcessingMode=streamCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Java 客户端 API 设置流模式
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以为特定 Red Hat Decision Manager 项目使用 KIE 模块描述符文件(
kmodule.xml)中的eventProcessingMode="<mode>"KIE base 属性来指定流模式:使用项目
kmodule.xml文件设置流模式Copy to Clipboard Copied! Toggle word wrap Toggle overflow
85.4.1. 决策引擎流模式中的负模式 复制链接链接已复制到粘贴板!
负模式是不满足的条件的模式。例如,如果检测到一个触发器且未激活 sprinkler,则以下 DRL 规则激活触发警报:
使用负模式触发警报规则
在云模式中,决策引擎会预先识别所有事实(常规事实和事件),并立即评估负模式。在流模式中,决策引擎可以支持事实上的临时限制,以便在激活规则前等待设定时间。
流模式中的相同示例规则照常激活 fire 警报,但应用 10 秒的延迟。
触发警报规则,具有负模式和时间延迟(仅限流模式)
以下修改的 fire 警报规则要求每 10 秒发生一 个 Heartbeat 事件。如果没有发生预期的事件,则会执行该规则。此规则在第一个模式和负模式中使用相同的对象类型。负模式具有临时限制,在执行前等待 0 到 10 秒,并排除绑定到 $h 的 Heartbeat 事件,以便可以执行该规则。要执行规则,必须明确排除绑定事件 $h,因为临时约束 [0s, …] 不严格排除该事件被重新匹配。
fire 警报规则排除了负模式(仅流模式)中的绑定事件。