Drools 中的 knowledgeSession.fireAllRules() 和 knowledgeSession.fireAllRules(1) 有什么区别?

What is difference between knowledgeSession.fireAllRules() and knowledgeSession.fireAllRules(1) in Drools ?

我的用例是 return 第一个匹配的规则而不匹配所有其他规则。有没有办法做到这一点? knowledgeSession.fireAllRules(max) 的意义是什么?

fireAllRules(max) 方法基本上采用您想要的规则匹配数量。它在内部所做的只是创建一个限制匹配数量的 AgendaFilter。 (参见 AgendaFilter 接口文档)。跳过参数意味着使用过滤器 returns 每个可能的规则都为真,因此您将匹配所有内容。

如果您想精确匹配 1 条规则,并且想知道它是哪一条,您可以将此方法与 AgendaEventListener 结合使用。

您可以做的是:

  1. 实施 AgendaEventListener 以存储已匹配的规则
  2. 调用 fireAllRules(1) 或编写您自己的议程过滤器以将匹配项数量限制为 1
  3. 评估匹配规则的侦听器

然而,这并不能让您控制要匹配的规则。使用过滤器时未匹配的所有规则,将在您下次触发所有规则时匹配(除非您再次限制规则执行等)。