【问题标题】:Drools rule firingDrools 规则触发
【发布时间】:2015-02-03 09:25:36
【问题描述】:

我有事件驱动的架构。说大约 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 事实的规则?

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

【问题讨论】:

  • AFAIK,底层的 Rete 算法应该解决这个问题。它将事实库中的对象与规则中的条件相匹配,以便仅评估可能受某些事实库更新影响的规则。

标签: drools rules


【解决方案1】:

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

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

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

【讨论】:

  • (完成@Steve 的最后一段),,这很可能会降低一切效率。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多