Drools规则开火

时间:2014-12-05 08:47:50

标签: drools rules

我有事件驱动的架构。假设有1000种事件类型,每种事件类型都可以有多个侦听器。每场比赛平均约2次。给2000个处理程序。 对于每个事件处理程序,我都要进一步评估规则,以查看是否需要该事件处理。

handle(MyEvent xxx){
 kisession.execute( xxx.getPayload());
 // Here I want the rules that are named/identified againt my Event alone to be fired
}

我可以添加MyEvent作为特定规则的LHS的一部分。

但是我希望对匹配进行预处理以节省事件触发后的处理时间。 是否有更好的方法来触发特定规则,而不是允许底层引擎评估所有2000规则以确定哪一个适用于Payload事实?

我可以在设计时自己识别特定事件处理程序的规则,并希望利用这一优势来获得更好的性能。

1 个答案:

答案 0 :(得分:2)

如果您从规则引擎外部选择要触发的规则,那么使用规则引擎绝对没有意义!

评估应激活哪些规则是Drools的目的。快速。每次调用fireAllRules时,Drools都不需要评估2000条规则,因为你有2000条规则。创建知识库时,规则将编译为一个图表,使引擎可以确定哪些规则可能针对某些匹配触发。每次插入,修改或撤消事实时都会更新图表。这有点像索引数据库表。

当然,你可以在技术上做到这一点。使用fireAllRules(AgendaFilter)方法过滤可能触发的规则。

相关问题