84.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
  • 在特定 Red Hat Process Automation Manager 项目的 KIE 模块描述符文件中启用连续模式(kmodule.xml):

    <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 设置为 动态
  • 以编程方式创建 KIE 基础时设定连续日程表:

    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 和在规则集中的位置排序。
  2. 每个可能规则匹配的元素会被创建。元素位置表示执行顺序。
  3. 节点内存被禁用,但 right-input 对象内存除外。
  4. left-input 适配器节点传播断开连接的,在 Command 对象中引用带有该节点的对象。Command 对象添加到工作内存中的列表中,以便稍后执行。
  5. 所有对象都会被断言,然后检查 并执行命令对象列表。
  6. 执行列表的所有匹配都将添加到元素中,具体取决于规则的序列号。
  7. 包含匹配项的元素按顺序执行。如果您设置了最多规则执行数,则决策引擎不会激活执行日程表中的相应数量。

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

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

安排优先队列的日程安排方式由每条规则的一个元素替代。RuleTerminalNode 节点的序列号表示放置匹配的元素。在 所有命令 对象完成后,会检查元素并执行现有的匹配项。为提高性能,则会保留元素中第一个和最后填充的单元。

创建该网络时,每个 RuleTerminalNode 节点都会根据其 salience 编号及其添加到网络中的顺序接收序列号。

right-input 节点 Imories 通常是用于删除快速对象的哈希映射。因为不支持删除对象,所以当对象的值没有索引时,Phreak 使用对象列表。对于大量对象,索引的散列映射可以提高性能。如果对象只有一个实例,Phreak 使用对象列表而不是索引。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat