81.3. Phreak 中的顺序模式


连续模式是决策引擎中的高级规则基础配置,由 Phreak 支持,使决策引擎能够按照决策引擎人员中列出的顺序评估规则一次,而无需考虑工作内存中的更改。在后续模式中,决策引擎忽略规则中的任何 插入修改 或更新 语句,并在单个序列中执行规则。因此,执行规则可能会更快,但重要的更新可能不适用于您的规则。

后续模式只适用于无状态 KIE 会话,因为有状态 KIE 会话本质上使用之前调用的 KIE 会话中的数据。如果您使用无状态 KIE 会话,并且希望执行规则来影响电缆中的后续规则,请不要启用后续模式。在决策引擎中默认禁用后续模式。

要启用后续模式,请使用以下选项之一:

  • 将系统属性 drools.sequential 设置为 true
  • 在以编程方式创建 KIE 基础时启用后续模式:

    KieServices ks = KieServices.Factory.get();
    KieBaseConfiguration kieBaseConf = ks.newKieBaseConfiguration();
    kieBaseConf.setOption(SequentialOption.YES);
    KieBase kieBase = kieContainer.newKieBase(kieBaseConf);
    Copy to Clipboard Toggle word wrap
  • 在 KIE 模块描述符文件(kmodule.xml)中为特定 Red Hat Process Automation Manager 项目启用后续模式:

    <kmodule>
      ...
      <kbase name="KBase2" default="false" sequential="true" packages="org.domain.pkg2, org.domain.pkg3" includes="KBase1">
        ...
      </kbase>
      ...
    </kmodule>
    Copy to Clipboard Toggle word wrap

要将后续模式配置为使用动态电缆,请使用以下选项之一:

  • 将系统属性 drools.sequential.agenda 设置为 dynamic
  • 在以编程方式创建 KIE 基础时设置后续 products 选项:

    KieServices ks = KieServices.Factory.get();
    KieBaseConfiguration kieBaseConf = ks.newKieBaseConfiguration();
    kieBaseConf.setOption(SequentialAgendaOption.DYNAMIC);
    KieBase kieBase = kieContainer.newKieBase(kieBaseConf);
    Copy to Clipboard Toggle word wrap

当您启用后续模式时,决策引擎会使用以下方法评估规则:

  1. 规则按照规则集中的 salience 和 location 进行排序。
  2. 每个可能的规则匹配都会创建一个元素。元素位置表示执行顺序。
  3. 节点内存被禁用,但正确的输入对象内存除外。
  4. left-input 适配器节点传播断开连接,并在 Command 对象中引用带有该节点的对象。Command 对象添加到工作内存中的列表中,以便稍后执行。
  5. 所有对象都被断言,然后检查并执行 Command 对象列表。
  6. 所有执行列表的结果都根据规则的序列号添加到元素中。
  7. 包含匹配项的元素按顺序执行。如果您设置了最大规则执行数,则决策引擎不会激活执行者中的规则数量。

在后续模式中,LeftInputAdapterNode 节点会创建一个 Command 对象,并将其添加到决策引擎工作内存中的列表。此命令对象包含对 LeftInputAdapterNode 节点和传播对象的引用。这些引用会在插入时停止任何输入输入传播,因此右侧输入不需要尝试加入左输入。引用也会避免对左输入内存的需求。

所有节点都关闭其内存,包括左输入的元组内存,但不包括正确的输入对象内存。完成所有断言并且填充所有对象的正确输入内存后,决策引擎会迭代 LeftInputAdatperNode Command 对象列表。对象传播网络,尝试加入右侧输入对象,但不会将它们保留在左面输入中。

具有调度元组的优先级队列的语音将被每个规则的元素替代。RuleTerminalNode 节点的序列号指示放置匹配项的元素。所有 Command 对象完成后,会检查元素并执行现有的匹配。为提高性能,保留元素中的第一个和最后一个填充的单元。

构建网络后,每个 RuleTerminalNode 节点都会根据其数量和添加到网络的顺序接收序列号。

右输入节点记住通常是用于快速删除对象的哈希映射。因为不支持删除对象,因此当对象值没有索引时,Phreak 使用对象列表。对于大量对象,索引的哈希映射可提供性能提高。如果对象只有几个实例,则 Phreak 使用对象列表而不是索引。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat