82.4. 决策引擎中的事件处理模式


决策引擎以云模式或流模式运行。在云模式中,决策引擎将事实处理为没有临时约束、独立于时间和无特定顺序的事实。在流模式中,决策引擎实时或接近实时将事实处理为具有强临时约束的事件。流模式使用同步在 Red Hat Process Automation Manager 中进行事件处理。

云模式

云模式是决策引擎的默认操作模式。在云模式中,决策引擎将事件视为一个未排序的云。事件仍具有时间戳,但在云模式下运行的决策引擎无法从时间戳中提取弹性,因为云模式会忽略当前时间。此模式使用规则约束来查找匹配的元组来激活和执行规则。

云模式不会在事实上强制实施任何类型的额外的要求。但是,由于此模式的决策引擎没有时间,所以无法使用临时功能,如分片窗口或自动生命周期管理。在云模式中,当不再需要事件时,必须明确重新遍历事件。

在云中不会应用以下要求:

  • 没有时钟同步,因为决策引擎没有时间的修改
  • 不排序事件,因为决策引擎将事件作为未排序的云处理,因此决策引擎与规则匹配

您可以通过在相关配置文件中设置系统属性或使用 Java 客户端 API 来指定云模式:

使用系统属性设置云模式

drools.eventProcessingMode=cloud

使用 Java 客户端 API 设置云模式

import org.kie.api.conf.EventProcessingOption;
import org.kie.api.KieBaseConfiguration;
import org.kie.api.KieServices.Factory;

KieBaseConfiguration config = KieServices.Factory.get().newKieBaseConfiguration();

config.setOption(EventProcessingOption.CLOUD);

您还可以使用特定 Red Hat Process Automation Manager 项目的 KIE 模块描述符文件(kmodule.xml)中的 eventProcessingMode="<mode>" KIE base 属性来指定云模式:

使用项目 kmodule.xml 文件设置云模式

<kmodule>
  ...
  <kbase name="KBase2" default="false" eventProcessingMode="cloud" packages="org.domain.pkg2, org.domain.pkg3" includes="KBase1">
    ...
  </kbase>
  ...
</kmodule>

流模式

流模式使决策引擎能够按时间处理事件,并在将事件插入到决策引擎中时实时处理事件。在流模式中,决策引擎同步事件流(因此不同流中的事件可以按按按按时间顺序处理),实施覆盖时间或长度的窗口,并启用自动生命周期管理。

以下要求适用于流模式:

  • 每个流中的事件必须按时间排序。
  • 必须存在会话时钟才能同步事件流。
注意

您的应用程序不需要在流间强制实施排序事件,但使用未同步的事件流可能会导致意外的结果。

您可以通过在相关配置文件中设置系统属性或使用 Java 客户端 API 来指定流模式:

使用系统属性设置流模式

drools.eventProcessingMode=stream

使用 Java 客户端 API 设置流模式

import org.kie.api.conf.EventProcessingOption;
import org.kie.api.KieBaseConfiguration;
import org.kie.api.KieServices.Factory;

KieBaseConfiguration config = KieServices.Factory.get().newKieBaseConfiguration();

config.setOption(EventProcessingOption.STREAM);

您还可以使用特定 Red Hat Process Automation Manager 项目的 KIE 模块描述符文件(kmodule.xml)中的 eventProcessingMode="<mode>" KIE base 属性来指定流模式:

使用项目 kmodule.xml 文件设置流模式

<kmodule>
  ...
  <kbase name="KBase2" default="false" eventProcessingMode="stream" packages="org.domain.pkg2, org.domain.pkg3" includes="KBase1">
    ...
  </kbase>
  ...
</kmodule>

82.4.1. 决策引擎流模式中的负模式

负模式是不符合的条件的模式。例如,如果检测到触发且没有激活 sprinkler,以下 DRL 规则会激活触发警告:

使用负模式触发警报规则

rule "Sound the alarm"
when
  $f : FireDetected()
  not(SprinklerActivated())
then
  // Sound the alarm.
end

在云模式中,决策引擎提前知道所有事实(相关事实和事件),并立即评估负模式。在流模式中,决策引擎可以在激活规则前支持事实上的临时限制,以等待集合时间。

流模式中的同一示例规则会激活触发警告,但会应用 10 秒的延迟。

触发具有负模式和时间延迟的警报规则(仅限流模式)

rule "Sound the alarm"
when
  $f : FireDetected()
  not(SprinklerActivated(this after[0s,10s] $f))
then
  // Sound the alarm.
end

以下修改后的触发警报规则要求每 10 秒发生一次 Heartbeat 事件。如果没有发生预期的事件,则执行该规则。此规则在第一个模式和负模式中使用同一类型的对象。负模式具有临时约束,在执行并排除绑定到 $hHeartbeat 事件前等待 0 到 10 秒,以便执行该规则。必须明确排除绑定事件 $h 才能执行规则,因为临时约束 [0s, …​] 不本质上排除该事件再次匹配。

触发警报规则排除在负模式中的绑定事件(仅限流模式)

rule "Sound the alarm"
when
  $h: Heartbeat() from entry-point "MonitoringStream"
  not(Heartbeat(this != $h, this after[0s,10s] $h) from entry-point "MonitoringStream")
then
  // Sound the alarm.
end

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部