一、说明

  ActiveMQ使用过程中,可以使用自带的控制台进行相关的操作以及查看,但是当队列数相当多的时候,在查询以及整体的监控上,就可能相当的不便。所以可通过JMX的方式,进行MQ中队列相关指标的以及整体健康性能等收集展示。

二、JMX功能开启

  2.1、broker标签中添加  userJmx="true":

  

  2.2、配置 managementContext

  

  其中 用户名、密码及权限配置在 jmx.password 和 jmx.access 文件中。

三、Java应用连接使用

  3.1、获取在线的队列消费者IP

private static final String queueObjectName = "org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=%s";
private static final String brokerAddress = "service:jmx:rmi:///jndi/rmi://%s/jmxrmi"; private static List<String> getQueueConsumers(String user, String password, String ip, String queueName) throws Exception{
List<String> result = Lists.newArrayList();
String url = String.format(brokerAddress, ip);
Map<String, Object> credentials = new HashMap<>();
credentials.put(JMXConnector.CREDENTIALS, new String[] {user, password}); JMXServiceURL urls = new JMXServiceURL(url); JMXConnector connector = JMXConnectorFactory.connect(urls,credentials);
connector.connect();
MBeanServerConnection conn = connector.getMBeanServerConnection(); ObjectName name = new ObjectName(String.format(queueObjectName, queueName));
QueueViewMBean queueViewMBean = MBeanServerInvocationHandler.newProxyInstance(conn, name, QueueViewMBean.class, true);
for (ObjectName mbeanNameConsumerObjectName : queueViewMBean.getSubscriptions()) {
SubscriptionViewMBean subscriptionViewMBean = MBeanServerInvocationHandler.newProxyInstance(conn, mbeanNameConsumerObjectName,SubscriptionViewMBean.class, true);
ObjectName connectionObjectName = new ObjectName(subscriptionViewMBean.getConnection().getCanonicalName());
ConnectionViewMBean connectionViewMBean = MBeanServerInvocationHandler.newProxyInstance(conn, connectionObjectName,ConnectionViewMBean.class, true);
if (connectionViewMBean != null) {
result.add(connectionViewMBean.getRemoteAddress().replace("//", "").split("\\:")[1]);
// System.out.println(connectionViewMBean.getRemoteAddress()+"|"+connectionViewMBean.getClientId());
}
}
return result;
}

  其中方法的参数: ip - broker的 ip 地址,user - JMX登录访问的用户名,password - JMX登录访问的密码,queueName - 待查询的队列名

  3.2、获取队列的出队、入队以及积压数等指标信息 

package workMQ;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeData;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL; import org.apache.activemq.broker.jmx.BrokerViewMBean;
import org.apache.activemq.broker.jmx.ConnectionViewMBean;
import org.apache.activemq.broker.jmx.ConnectorViewMBean;
import org.apache.activemq.broker.jmx.QueueViewMBean; import com.google.common.collect.Maps; public class Test08 { public static void main(String[] args) throws Exception { String ip = "192.168.25.43:9607"; String url = String.format("service:jmx:rmi:///jndi/rmi://%s/jmxrmi",ip);
Map<String, Object> credentials = new HashMap<>();
credentials.put(JMXConnector.CREDENTIALS, new String[] {"admin", "activemq"}); JMXServiceURL urls = new JMXServiceURL(url); JMXConnector connector = JMXConnectorFactory.connect(urls,credentials);
connector.connect();
MBeanServerConnection conn = connector.getMBeanServerConnection(); ObjectName name = new ObjectName("org.apache.activemq:brokerName=localhost,type=Broker");
BrokerViewMBean mBean = (BrokerViewMBean)MBeanServerInvocationHandler.newProxyInstance(conn, name, BrokerViewMBean.class, true); for(ObjectName na : mBean.getQueues()){
QueueViewMBean queueBean = (QueueViewMBean) MBeanServerInvocationHandler.newProxyInstance(conn, na, QueueViewMBean.class, true);
System.out.println("队列的名称:"+queueBean.getName());
System.out.println("消息积压数:"+queueBean.getQueueSize());
System.out.println("入队:"+queueBean.getEnqueueCount());
System.out.println("出队:"+queueBean.getDequeueCount());
System.out.println("消费者数:"+queueBean.getConsumerCount());
System.out.println("生产者数:"+queueBean.getProducerCount());
//还有很多队列指标信息,具体可根据实际使用获取
  }
}
}

四、JDK自带JConsole连接

  1、JDK安装目录下的 bin 文件夹,点击JConsole.exe

  2、选择远程进程,输入 brokerAddress、username、password

  brokerAddress 格式 : service:jmx:rmi:///jndi/rmi://具体的brokerip地址:配置的JMX的port访问端口/jmxrmi

  username、password 即是JMX的访问用户名、密码

  

  3、进入后,可查看相关信息

ActiveMQ JMX使用的更多相关文章

  1. activemq jmx

    增加: -Djava.rmi.server.hostname=<IP addr>

  2. JMX操作ActiveMQ(2)

    默认情况下,ActiveMQ使用useJmx后,jmx的url为 service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi 这时,jmx的MBean se ...

  3. JMX与Spring

    1.什么是JMX JMX可以监控类的运行情况,可以在程序运行期查看并修改类属性的信息. 举一个应用实例:在一个系统中常常会有一些配置信息,比如服务的IP地址,端口号什么的,那么如何来写这些代码呢? 下 ...

  4. ActiveMQ笔记(5):JMX监控

    系统上线运行后,及时监控报警是很必要的手段,对于ActiveMQ而言,主要监控的指标有:MQ本身的健康状况.每个队列的生产者数量.消费者数量.队列的当前消息数等. ActiveMQ支持JMX监控,使用 ...

  5. JMX操作ActiveMQ(1)

    我们知道ActiveMQ broker的管理接口是通过JMX方式提供的. 一个简单的访问方式就是通过jconsole,输入 service:jmx:rmi:///jndi/rmi://localhos ...

  6. Zabbix JMX监控之ActiveMQ

    监控原理: ActiveMQ作为依赖java环境的中间件,同样可以像tomcat一样用JMX(java扩展程序)监控.并且与tomcat不同的是,ActiveMQ自带了JMX,只需在配置文件中开启即可 ...

  7. Activemq开启JMX及问题排查

    0.服务端开启JMX服务 一.修改${ ActiveMQ_HOME} /conf/activemq.xml文件 在<broker>标签中添加如下属性:useJMX="true&q ...

  8. (错误)启动ActiveMQ报错:Transport Connector could not be registered in JMX: java.io.IOException: Failed to bind to server socket: stomp://0.0.0.0:61613?

    一.错误报告 很明显,端口被占用 二.解决方法 1. 在cmd中输入 netstat -ano 查看61613端口被占用情况,如果有其他进程使用,则使用 taskkill /f /pid 进程PID  ...

  9. ActiveMQ笔记(1):编译、安装、示例代码

    一.编译 虽然ActiveMQ提供了发布版本,但是建议同学们自己下载源代码编译,以后万一有坑,还可以尝试自己改改源码. 1.1 https://github.com/apache/activemq/r ...

随机推荐

  1. python学习之路(2)---字符编码

    二进制编码 bin(300)    python计算二进制编码,十进制转2进制 一个二进制位就是1bit 1bit代表了8个字节,00001111 1bit  = 1bytes   缩写1b 1kb ...

  2. Arduino 常用函数参考文档

    封装好的API,使得程序中的语句更容易被理解,我们不用理会单片机中繁杂的寄存器配置,就能直观的控制Arduino,增强程序可读性的同时,也提高了开发效率. 本篇主要介绍: 一,项目结构 1.setup ...

  3. 使用Mybatis-Generator 自动生成代码

    前提:已经有SpringBoot的工程,且在上面实现了MyBatis的应用,只不过全是以手动方式创建mapper.xml映射文件.pojo类等. 在POM中添加MyBatis.generator依赖 ...

  4. Oracle笔记_基础

    1 登录启动 sqlplus / as sysdba #以管理员方式登录 sqlplus 用户名/密码 #本地登录 sqlplus 用户名/密码@//主机IP/实例名(默认orcl) #远程登录 sq ...

  5. .Net使用HttpClient以multipart/form-data形式post上传文件及其相关参数

    前言: 本次要讲的是使用.Net HttpClient拼接multipark/form-data形式post上传文件和相关参数,并接收到上传文件成功后返回过来的结果(图片地址,和是否成功).可能有很多 ...

  6. JVM知识点总结

    JVM总体梳理 一.jvm体系总体概览 JVM体系总体分四大块:类的加载机制.jvm内存结构.GC算法 垃圾回收.GC分析 命令调优 这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点 ...

  7. 第二篇 特征点匹配以及openvslam中的相关实现详解

    配置文件 在进入正题之前先做一些铺垫,在openvslam中,配置文件是必须要正确的以.yaml格式提供,通常需要指明使用的相机模型,ORB特征检测参数,跟踪参数等. #==============# ...

  8. Spring 核心技术(7)

    接上篇:Spring 核心技术(6) version 5.1.8.RELEASE 1.6 定制 Bean 的特性 Spring Framework 提供了许多可用于自定义 bean 特性的接口.本节将 ...

  9. 简单的 Python 人脸识别实例

    案例一 导入图片 思路: 1.导入库 2.加载图片 3.创建窗口 4.显示图片 5.暂停窗口 6.关闭窗口 # 1.导入库 import cv2 # 2.加载图片 img = cv2.imread(' ...

  10. manacher --- 暂 旧版本

    #include<bits/stdc++.h> using namespace std; ; ]; int n; ]; void manacher() { memset(len, , si ...