第 80 章 在决策引擎中执行控制


当新规则数据进入决策引擎的工作内存时,规则可能会完全匹配并有资格执行。单个工作内存操作可能会导致多个有资格的规则执行。当规则完全匹配时,决策引擎会创建一个激活实例,引用规则和匹配的事实,并将激活添加到决策引擎计划中。用户使用冲突解析策略来控制这些规则激活的执行顺序。

在 Java 应用程序中第一次调用 fireAllRules () 后,决策引擎周期会重复到两个阶段:

  • 参与评估。在此阶段,决策引擎会选择可执行的所有规则。如果没有可执行规则,则执行周期将结束。如果找到可执行规则,则决策引擎会在电缆中注册激活,然后进入工作的内存操作阶段来执行规则结果操作。
  • 操作内存操作。在此阶段,决策引擎会对之前在电话中注册的所有激活的规则执行规则结果操作(每个规则部分)。完成所有结果操作后,或者主 Java 应用程序进程调用 fireAllRules () 再次调用 fireAllRules (),决策引擎将返回到销售评估阶段以重新处理规则。

图 80.1. 决策引擎中的两阶段执行过程

当电话上存在多个规则时,一个规则的执行可能会导致另一个规则从电缆中删除。要避免这种情况,您可以定义如何在决策引擎中执行规则。定义规则执行顺序的一些常见方法是,使用规则 salience、Mitment group、激活组或 DRL 规则集的规则单元。

80.1. 规则的 Salience

每个规则都有一个整数 salience 属性,用于决定执行顺序。在激活队列中排序时,具有较高 salience 值的规则会被赋予更高的优先级。规则的默认 salience 值为零,但 salience 可以是负数或正数。

例如,以下 DRL 规则示例列在决策引擎堆栈中,按所示的顺序列出:

rule "RuleA"
salience 95
when
    $fact : MyFact( field1 == true )
then
    System.out.println("Rule2 : " + $fact);
    update($fact);
end

rule "RuleB"
salience 100
when
   $fact : MyFact( field1 == false )
then
   System.out.println("Rule1 : " + $fact);
   $fact.setField1(true);
   update($fact);
end
Copy to Clipboard Toggle word wrap

RuleB 规则列出第二个,但它的 salience 值高于 RuleA 规则,因此首先执行。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat