搜索

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

download PDF

当新规则数据进入决策引擎的工作内存时,规则可能完全匹配且符合执行条件。单一工作内存操作可产生多个符合条件的规则执行。当某个规则完全匹配时,决定引擎创建激活实例,引用规则和匹配事实,并将激活添加到决策引擎日程表中。日程表使用冲突解决策略控制这些规则激活的执行顺序。

在 Java 应用程序第一个调用 fireAllRules() 后,决策引擎循环在两个阶段重复执行:

  • 日程评估.在此阶段,决策引擎选择可以执行的所有规则。如果没有可执行规则,则执行周期将结束。如果找到可执行规则,则决策引擎在时间表中注册激活,然后进入正常工作的内存操作阶段来执行规则导致操作。
  • 操作内存操作。在此阶段,决策引擎针对之前在日程中注册的所有已激活规则执行规则后果操作(每个规则的一部分)。完成所有结果操作后,或者主 Java 应用程序进程调用 fireAllRules() 后,决策引擎将返回到日程评估阶段,以重新评估规则。

图 83.1. 决定引擎中的双阶段执行过程

企业 2 阶段

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

83.1. 规则的隔离

每个规则都有一个整数 sali ence 属性,它决定了执行的顺序。在激活队列中排序时,具有较高优先级的规则会被赋予更高的优先级。规则的默认 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

RuleB 规则是第二种规则,但它的值高于 RuleA 规则,因此首先执行。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.