You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drools知识库中如何实现仅执行KieBase内指定drl文件的规则

Drools指定部分DRL文件规则执行解决方案

以下方案均基于Drools 7.4版本实现,无需重复构建KieBase,运行时开销极低:

方案1:使用AgendaFilter动态过滤规则(无需修改DRL代码,推荐)

  • 原理:Drools在执行匹配成功的规则前,会调用AgendaFilter的accept方法校验,只有返回true的规则才会被执行。我们可以通过校验规则所属的DRL资源文件名,实现仅执行指定文件的规则。
  • 适配你示例代码的修改如下:
import org.kie.api.runtime.rule.AgendaFilter;
import org.kie.api.runtime.rule.Match;
import org.kie.api.definition.rule.Rule;
import org.kie.api.command.CommandFactory;

// 省略你原有构建KieBase的代码

Applicant ap=new Applicant("",18);
StatelessKieSession kieSession = kbase.newStatelessKieSession();

// 定义本次需要执行的DRL文件名集合
Set<String> allowedDrLs = Collections.singleton("applicant.drl");

kieSession.execute(Arrays.asList(
        CommandFactory.newInsert(ap),
        CommandFactory.newFireAllRules(new AgendaFilter() {
            @Override
            public boolean accept(Match match) {
                Rule rule = match.getRule();
                // 获取规则所属DRL文件的路径,可根据实际存储格式调整匹配逻辑
                String resourcePath = rule.getResource().getSourcePath();
                // 匹配文件名是否在允许列表内
                return allowedDrLs.stream().anyMatch(resourcePath::endsWith);
            }
        })
));
  • 适用场景:动态生成大量DRL、无法修改DRL文件内容的场景,灵活性最高。

方案2:按DRL文件配置规则分组(执行效率更高)

  • 原理:在生成DRL文件时,给每个DRL文件头部统一配置agenda-group属性,同一个文件的所有规则默认归属同一分组,执行时仅激活指定分组即可。
  • 操作步骤:
    1. 在applicant.drl文件头部添加配置:
    agenda-group "applicant.drl"
    // 原有import、规则定义逻辑保持不变
    
    1. 在applicant2.drl文件头部添加配置:
    agenda-group "applicant2.drl"
    
    1. 执行时指定要激活的分组:
    StatelessKieSession kieSession = kbase.newStatelessKieSession();
    // 仅激活applicant.drl对应的规则组
    kieSession.getAgenda().getAgendaGroup("applicant.drl").setFocus();
    kieSession.execute(ap);
    
  • 适用场景:可控制DRL生成逻辑的场景,执行效率高于AgendaFilter方案。

方案3:预构建分场景KieBase

  • 原理:服务启动时,将规则按业务场景、用户维度等划分,分别构建独立的小KieBase缓存,执行时直接获取对应维度的KieBase创建会话即可。
  • 适用场景:规则分组维度固定、无频繁新增分组的场景,运行时效率最高。

内容的提问来源于stack exchange,提问作者Utesting

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:24:01