Drools 7 JMX Mbean 及Metric 分析

Mbean

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

 -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核心类的如下代码中

 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 为例:

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的输出:

 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调用和查看继承关系,大致是如下

在这里插入图片描述
会进行记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/190470.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Win11安装Docker

一、进入Docker官网 首先先到Docker官网下载最新官方Docker for Windows链接:Docker下载 在官网内可以查看到Docker的开发文档: 根据官网提示,Windows环境下下载Docker必须满足:Docker for Windows requires 64bit Windows 11 Pro…

CSS之弹性盒子Flexible Box

我想大家在做布局的时候,没接触flex布局之前,大家都是用浮动来布局的,但现在我们接触了flex布局之后,我只能说:“真香”。让我为大家介绍一下弹性盒子模型吧! Flexible Box 弹性盒子 在我们使用弹性盒子时&…

linux系统初始化本地git,创建ssh-key

step1, 在linux系统配置你的git信息 sudo apt install -y git//step1 git config --global user.name your_name // github官网注册的用户名 git config --global user.email your_email //gitub官网注册绑定的邮箱 git config --list //可以查看刚才你的配置内容…

redis的集群,主从复制,哨兵

redis的高可用 在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和集群,下面分别说明它们的作用,以及解决了什么样的问题。 持久化: 持久化是最简单的高可用方法(有时甚至不被归为高可用的手段)…

HONOR荣耀MagicBook 15 2021款 锐龙版R5(BMH-WFQ9HN)原厂Windows11预装OEM系统含F10智能还原

链接:https://pan.baidu.com/s/1faYtC5BIDC2lsV_JSMI96A?pwdj302 提取码:j302 原厂系统Windows11.22H2工厂模式安装包,含F10一键智能还原,自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、荣耀 电脑管家等预装程序 …

相识词设计思路及实现方法

目录 1.业务背景 2.实现方法 第一种: ​编辑 第二种: 3.相关材料 1.业务背景 业务有全文检索功能,然后根据标书的要求需要有近似词的功能,一般近似词需要模型训练之后成为词库,是需要大数据相关人员负责。负责人表示…

【Leetcode合集】1457. 二叉树中的伪回文路径

1457. 二叉树中的伪回文路径 1457. 二叉树中的伪回文路径 代码仓库地址: https://github.com/slience-me/Leetcode 个人博客 :https://slienceme.xyz 给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&am…

2024年最新最全的Jmeter接口测试必会知识点:jmeter连接数据库

jmeter连接mysql数据库 大致步骤如下: 1、下载mysql的jar包放入到jmeter的lib下,然后重启jmeter 2、配置JDBC Connection Configuration 3、配置JDBC Request 4、在请求中引用查询到的结果变量,可以结合计数器取每一个结果值&#xff1a…

RocketMQ 安装部署及应用场景记录

文章目录 前言一、RocketMQ简介1.1 整体架构 二、RocketMQ安装部署2.1 RocketMQ 下载2.2 修改 JVM 参数2.3 启动 NameServer 和 Broker2.4 验证发送和接受消息2.5 停止 NameServer 和 Broker2.6 配置全局环境 三、RocketMQ应用场景3.1 异步处理3.2 应用解耦3.3 流量削峰 前言 …

基于acme免费申请泛域名证书

参考文档:https://github.com/acmesh-official/acme.sh 文章目录 step1: 获取阿里云的ak、skstep2: 安装acmestep3: 安装通配符证书step4: 查看证书step5: 证书的使用step6: 删除证书 step1: 获取阿里云的ak、sk export Ali_Key"LTAI5tG8888888CDoEjLzkE"…

Maxwell安装部署消费到kafka集群

1.上传安装包到linux系统上面 2.解压安装包到安装目录下,并且重命名 [rootVM-4-10-centos package]# tar -zxvf maxwell-1.29.2.tar.gz -C /opt/software/3.配置mysql 增加以下配置 #数据库id server-id 1 #启动binlog,该参数的值会作为binlog的文件…

Vite -构建优化 - 分包策略 + 打包压缩

什么是分包策略 分包策略 就是把不会常规更新的文件,单独打包处理。问 :什么是不会常规更新的文件? 答 : 就是基本上不会改的文件,比如我们引入的第三方的依赖包,例如 lodash工具包,这些工具包…

小程序项目:springboot+vue基本微信小程序的电子书阅读器小程序

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时…

Python基础:字符串详解(需补充完善)

1. 字符串定义 在Python中,字符串是一种数据类型,用于表示文本数据。字符串是由字符组成的序列,可以包含字母、数字、符号和空格等字符。在Python中,你可以使用单引号()或双引号("&#x…

Leetcode—94.二叉树的中序遍历【简单】

2023每日刷题(四十) Leetcode—94.二叉树的中序遍历 C语言实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Note: The returned array mus…

[Linux]进程等待

文章目录 3.进程等待3.1什么是进程等待3.2为什么要进程等待3.3如何进行进程等待?1.wait2.waitpid2.1函数的讲解2.2status的理解2.3代码理解 3.4学后而思1.直接用全局变量获取子进程退出码可以吗?如下2.进程具有独立性 退出码是子进程的数据 父进程是如何拿到退出码的3.对内存…

【brpc学习实践十】streaming log实战

实战实例 通常我们在服务还没正式起来时,会用brpc流式log打印,支持对日志输出到ostream对象中(默认std)。同时会在服务初始化时配置LogSink,实现自己的log,这样后续都可以将输出重定向至自己的log. int init(int arg…

【C++】类型转换 ③ ( 重新解释类型转换 reinterpret_cast | 指针类型数据转换 )

文章目录 一、重新解释类型转换 reinterpret_cast1、指针数据类型转换 - C 语言隐式类型转换报错 ( 转换失败 )2、指针数据类型转换 - C 语言显示类型强制转换 ( 转换成功 )3、指针数据类型转换 - C 静态类型转换 static_cast ( 转换失败 )4、指针数据类型转换 - C 重新解释类型…

有关HarmonyOS-ArkTS的Http通信请求

一、Http简介 HTTP(Hypertext Transfer Protocol)是一种用于在Web应用程序之间进行通信的协议,通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…

一盏茶的时间,入门 Node.js

一、.什么是 Node.js? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,用于构建高性能、可伸缩的网络应用。 它采用事件驱动、非阻塞 I/O 模型,使其在处理并发请求时表现出色。 二、安装 Node.js 首先,让我们从 Node.…