关于Drools 5.x规则引擎匹配行为及可选Fact定义的问询
Drools 5.x规则触发问题解答
1. 同时触发动作X和Z属于预期行为吗?
是的,这完全是Drools的预期行为。Drools的规则匹配逻辑是只要规则的条件被完全满足就会触发,不会因为Fact存在额外属性就排除匹配。你的第二个规则只要求Fact包含A和B,当传入的Fact同时有A、B、C时,完全符合该规则的条件,所以两个规则都会被匹配并触发对应动作。
2. 能否将Fact C定义为可选条件实现触发控制?
当然可以,常见的实现方式有两种:
方式一:给规则Z添加否定约束,明确排除存在C的情况
直接在规则Z的条件里限定C不存在,这样当传入的Fact包含C时,规则Z就不会匹配:
rule "Trigger Z" when Fact(A != null, B != null, C == null) then // 执行动作Z end rule "Trigger X" when Fact(A != null, B != null, C != null) then // 执行动作X end
方式二:用优先级+存在性约束实现触发优先级
如果需要更灵活的控制(比如后续可能扩展其他条件),可以给规则设置salience(优先级,数值越高越先执行),同时给规则Z添加“不存在C”的约束:
// 优先级更高,有C时先触发X rule "Trigger X" salience 20 when Fact(A != null, B != null, C != null) then // 执行动作X end // 仅当没有C时触发Z rule "Trigger Z" salience 10 when Fact(A != null, B != null) not Fact(C != null) then // 执行动作Z end
这两种方式都能实现:当Fact包含A、B、C时只触发X,仅包含A、B时触发Z的控制逻辑。
内容的提问来源于stack exchange,提问作者saiD
相关产品推荐
相关产品推荐

