首页 > 解决方案 > 控制同一包中2个drools文件的执行顺序

问题描述

我在同一个包 com.sample.order.rules orders.drl 和 order-summary.drl 中有 2 个流口水文件。我想处理 orders.drl 中的所有订单,然后从 order.drl 处理的结果中,使用 order-summary.drl 创建一个订单摘要。我目前通过将 order-summary.drl 中的所有显着性设置为 -1 来控制执行顺序。有没有可能以其他方式解决这个问题?问题是规则的数量正在增加,并且为 order-summary.drl 中的每条规则添加显着性只是感觉不对。

标签: droolsrules

解决方案


可以使用属性控制规则组的执行顺序,请参阅文档ruleflow-group中的示例。一般来说,方法是:

  1. ruleflow-group属性标记您的相关规则。
  2. 创建 BPMN 流(业务流程)
  3. 将您的每个ruleflow-groups 与一个业务流程任务相关联
  4. 在 jBPM 流程下触发您的规则

这允许您(可选地)仅在满足上一个订单步骤中的某些条件时触发您的汇总步骤。我建议查看 Drools Business Central Showcase Docker image提供的 Mortgage_Process 示例。要设置 KIE 执行服务器 API 以迭代地测试您的规则和流程,请参阅此处的 docker-compose 设置。

第1步

rule "order rule 1"
  ruleflow-group "orders"
when
  Order ( value > 10 )
then
  insert ( new Shipment () );
end
rule "summary rule 1"
  ruleflow-group "summary"
when
  Shipment ()
then
  // do stuff
end

第2步 在此处输入图像描述


推荐阅读