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

Drools 8规则引擎:如何从Agenda中检索规则?技术咨询

Drools 8 检索Agenda中规则的实现方法

核心思路

Drools 8的Agenda里存的是**激活(Activation)**对象,每个激活对应一条匹配成功的规则,你得通过Activation关联的API提取规则信息,而非直接从Agenda或AgendaGroup拿规则列表。

具体实现方法

  • 遍历Agenda中所有激活的规则
    先通过KieSession获取Agenda实例,再遍历所有激活对象提取Rule信息:

    KieSession kieSession = kieContainer.newKieSession();
    Agenda agenda = kieSession.getAgenda();
    
    // 遍历所有激活的规则
    for (Activation activation : agenda.getActivations()) {
        Rule rule = activation.getRule();
        // 获取规则核心信息
        System.out.println("规则名: " + rule.getName());
        System.out.println("所属包: " + rule.getPackageName());
        System.out.println("规则描述: " + rule.getDescription());
    }
    
  • 查看指定AgendaGroup中的规则
    若只关注某个AgendaGroup内的规则,先定位目标分组再遍历:

    AgendaGroup targetGroup = agenda.getAgendaGroup("your-agenda-group-name");
    if (targetGroup != null) {
        for (Activation activation : targetGroup.getActivations()) {
            Rule rule = activation.getRule();
            System.out.println("分组内规则: " + rule.getName());
        }
    }
    
  • 追踪已执行的规则
    要是需要查看已执行完毕的规则,可通过AgendaEventListener监听规则触发事件:

    kieSession.addEventListener(new DefaultAgendaEventListener() {
        @Override
        public void afterActivationFired(AfterActivationFiredEvent event) {
            Rule executedRule = event.getActivation().getRule();
            System.out.println("刚执行的规则: " + executedRule.getName());
        }
    });
    
    // 触发规则执行
    kieSession.fireAllRules();
    

注意事项

  • 必须在规则执行前或执行过程中获取Agenda的激活列表,规则执行完成后,对应激活会从Agenda中移除。
  • 若KieSession已调用dispose(),Agenda相关对象会失效,无法再获取规则信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:12:51