Drools 7 JMX Mbean 及Metric 分析

Mbean

mbean的打开很简单,使用jmx启动参数:

java 复制代码
 -Dcom.sun.management.jmxremote.port=9999 
 -Ddrools.mbeans=enabled   
 -Dcom.sun.management.jmxremote.authenticate=false    
 -Dcom.sun.management.jmxremote.ssl=false  

但通过jconsole能直观看到的东西也很少

在这里插入图片描述

如果有必要,需要使用代码进一步自行分析,以下是7支持的mbean

Metric

Metric 在doc里面提的很少,几个关键点

  • 输出只能在log 和micrometer 二选一
  • 只有时间超过threshold才记录
  • 只有部分操作记录

输出2选1,及threshold都在以下metric核心类的如下代码中

java 复制代码
 public void logAndEndMetrics() {
        if (this.enabled) {
            NodeStats stats = (NodeStats)this.nodeStats.get();
            if (stats != null && stats.isStarted()) {
                long evalCount = stats.getEvalCount();
                long elapsedTimeInNanos = System.nanoTime() - stats.getStartTime();
                long elapsedTimeInMicro = elapsedTimeInNanos / 1000L;
                if (evalCount > 0L && elapsedTimeInMicro > (long)this.threshold) {
                    if (this.micrometerAvailable) {
                        MicrometerUtils.INSTANCE.triggerMicrometer(stats.getNode(), evalCount, elapsedTimeInNanos);
                    } else {
                        logger.trace("{}, evalCount:{}, elapsedMicro:{}", new Object[]{stats.getNode(), evalCount, elapsedTimeInMicro});
                    }
                }
            } else {
                logger.warn("nodeStats has to be initialized. Call startMetrics() beforehand : stats = {}", stats);
            }

            this.nodeStats.remove();
        }

    }
 

只有部分操作记录 其实也和上述代码的evalCount 必须大于0有关,以下面的drl 为例:

java 复制代码
rule "Always Stateless World"
    dialect "java"
    when
        m : Message( status >-1 )
        if (  m.getStatus()>2  ) do[giveDiscount]
    then
        System.out.println( "Always  Stateless message" );
         Thread.sleep(2000);
    then[giveDiscount]
          System.out.println( "  do---- "  );
end

rule "Stateless Hello World"
    dialect "mvel"
    when
        m : Message( status == Message.HELLO, message : message )

    then
        System.out.println( message );

//        modify ( m ) { setMessage( "Goodbyte Stateless cruel world" ),
//                       setStatus( Message.GOODBYE ) };
    modify ( m ) { message = "Goodbye cruel world",
                   status = Message.GOODBYE };
    Thread.sleep(1000);
end

只有如下仅仅ConditionalBranchNode的输出:

powershell 复制代码
 15:08:56.014 [main] TRACE o.drools.metric.util.MetricLogUtils.logAndEndMetrics:94 - [ConditionalBranchNode: cond=if ( org.drools.examples.helloStateLess.Rule_Always_Stateless_World278963341Eval0Invoker@d53a879c ) do[[RuleTerminalNode(6): rule=Always Stateless World, consequence=giveDiscount]]], evalCount:1, elapsedMicro:175
Always  Stateless message
Stateless Goodbye cruel world
status=1,Goodbye cruel world

搜索代码incrementEvalCount调用和查看继承关系,大致是如下

会进行记录。

相关推荐
铸人1 个月前
对于相对速度的重新理解 - 2
分析·复数·物理
网络研究院3 个月前
网络安全:建筑公司会计软件遭受暴力攻击
网络·安全·研究·漏洞·报告·分析
网络研究院3 个月前
攻击者将恶意软件分解成小块并绕过您的安全网关
网络·网关·安全·攻击·技术·分块·分析
网络研究院3 个月前
Radware 报告 Web DDoS 攻击活动
ddos·研究·报告·网络攻击·分析·威胁情报·攻击活动
weixin_404551244 个月前
使用 jar-analyzer 和dbeaver 分析java
java·jar·分析·方法调用
小哇6664 个月前
springboot整合drools规则引擎 示例入门
spring boot·drools
QQ_AHAO5 个月前
Drools开源业务规则引擎(六)- Drools Flow中RuleFlow文件即*.rf文件介绍
规则引擎·drools·drools flow·jbpm5
QQ_AHAO5 个月前
Drools开源业务规则引擎(五)- jBPM流程图元素介绍
java·规则引擎·drools·jbpm流程图·业务流程
QQ_AHAO6 个月前
Drools开源业务规则引擎(二)- Drools规则语言(DRL)
开源·规则引擎·drools·brms
QQ_AHAO6 个月前
Drools开源业务规则引擎(一)- 安装与介绍
java·开源·规则引擎·drools·brms