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

Drools中fireAllRules会触发什么事件?需用EventListener实现耗时监控

Drools 7.73.0.Final 基于EventListener实现fireAllRules()耗时监控

Drools的AgendaEventListener机制正好能满足你的需求——它提供了与fireAllRules()执行生命周期绑定的事件,无需重复编写计时代码,直接通过监听事件完成耗时统计。以下是具体实现方案:

1. 自定义耗时监控监听器

继承DefaultAgendaEventListener(该类默认实现了AgendaEventListener的所有空方法,只需重写需要的事件处理逻辑),利用BeforeFireAllRulesEvent和AfterFireAllRulesEvent作为计时的起止节点:

import org.kie.api.event.rule.DefaultAgendaEventListener;
import org.kie.api.event.rule.BeforeFireAllRulesEvent;
import org.kie.api.event.rule.AfterFireAllRulesEvent;

public class RuleTimerListener extends DefaultAgendaEventListener {
    private long startTime;

    @Override
    public void beforeFireAllRules(BeforeFireAllRulesEvent event) {
        // 记录fireAllRules()开始执行的时间戳
        startTime = System.nanoTime();
        // 可选:添加上下文信息,比如会话ID、规则集标识
        System.out.println("fireAllRules()启动,会话ID:" + event.getKieRuntime().getIdentifier());
    }

    @Override
    public void afterFireAllRules(AfterFireAllRulesEvent event) {
        // 计算耗时并输出/上报
        long durationMs = (System.nanoTime() - startTime) / 1_000_000;
        int firedRuleCount = event.getNumberOfRulesFired();
        System.out.printf("fireAllRules()执行完成,耗时:%dms,触发规则数:%d%n", durationMs, firedRuleCount);
        
        // 这里可以替换为日志框架打印、监控系统上报等逻辑
    }
}

2. 注册监听器到KieSession

每次创建KieSession后,将自定义监听器绑定到会话上,后续所有fireAllRules()调用都会自动触发计时逻辑:

KieContainer kieContainer = KieServices.Factory.get().getKieClasspathContainer();
KieSession kieSession = kieContainer.newKieSession();

// 注册耗时监控监听器
kieSession.addEventListener(new RuleTimerListener());

// 执行规则
kieSession.fireAllRules();

// 关闭会话
kieSession.dispose();

关键注意事项

  • 计时精度:如果需要微秒级精度,保留System.nanoTime()即可;毫秒级需求可以改用System.currentTimeMillis()
  • 会话级别:监听器是绑定到单个KieSession的,复用会话时只需注册一次;每次新建会话都需要重新注册
  • 扩展能力:可以在监听器中添加业务上下文信息(比如当前处理的业务ID),方便后续定位性能瓶颈

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:17:10