议程和优先级
若要了解业务规则引擎如何评估规则和执行操作,需要了解 议程 和 优先级的概念。
议程
议程是引擎对要执行的规则进行排队时使用的计划。 议程用于引擎实例,它对单个策略而不是一系列策略起作用。 将事实添加到工作内存中并且满足给定规则的条件时,该规则将被放置在议程上并根据优先级执行。 从上至下按顺序执行规则的操作,然后执行议程中下一个规则的操作。
属于某一规则的操作被视为一个模块,这样,在继续到下一个规则之前将执行该规则的所有操作。 将执行规则模块中的所有操作,而不管模块中的其他操作。 有关断言的详细信息,请参阅 引擎控制函数。
以下示例说明议程是如何工作的:
Rule1
IF
Fact1 == 1
THEN
Action1
Action2
Rule2
IF
Fact1 > 0
THEN
Action3
Action4
我们将值为 1 的事实 Fact1 添加到引擎中。 由于 Rule1 和 Rule2 的条件都得到了满足,因此两个规则都移至议程,以便执行它们的操作。
工作内存 | 议程 |
---|---|
Fact1(值=1) | Rule1 - Action1 - Action2 Rule2 - Action3 - Action4 |
优先度
每个规则都设置了执行优先级,所有规则的默认优先级为 0。 优先级可以大于、等于或小于 0,数字越大优先级越高。 操作按照从最高优先级到最低优先级的顺序执行。
以下示例说明优先级如何影响规则的执行顺序:
Rule1(优先级 = 0)
IF
Fact1 == 1
THEN
Discount = 10%
Rule2(优先级 = 10)
IF
Fact1 > 0
THEN
Discount = 15%
两条规则的条件都已得到满足,但首先执行 Rule2,因为它具有更高的优先级。 最终折扣为 10%,因为它是对 Rule1 执行操作的结果,如下表所示:
工作内存 | 议程 |
---|---|
Fact1(值=1) | Rule2 折扣 = 15% Rule1 折扣 = 10% |