通过jmx获取activemq-5.90集群监控信息的java代码

准备工作:

activemq-5.90安装包  下载地址:http://activemq.apache.org/download-archives.html

安装步骤请参考:http://blog.csdn.net/qq_29447481/article/details/72901969

在搭建好activemq-5.90集群后,对activemq进行jmx监控设置:

第一步:

修改conf/activemq.xml配置文件

找到<broker处,在后面添加 上 useJmx="true"

找到createConnector="false"将false修改为true,同时添加上connectorPort=“jmx端口号(一般是11099)” connectorHost=“本机ip地址"

修改完后的效果图如下

<broker … useJmx="true">
    <managementContext>
   <managementContext createConnector="true" connectorPort=“jmx端口号” connectorHost=“本机ip地址" />         
    </managementContext>
</broker> 
第二步:设置jmx.access、jmx.password的文件权限(为了安全考虑将这两个文件设置为只读)

chmod 400 conf/jmx.*
第三步: 修改bin\activemq 启动shell脚本(如果是activemq-5.9版本的,先进去看一下是否有这段,没有的话再插入,我配置时发现activemq-5.9版本的里面有这段)
找到invoke_start(){ 这段,然后在前面插入:(注意是在这段上面插入,不是在这段里面的前面插入)
ACTIVEMQ_CONF=“jmx.password所在位置的物理路目录"
ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=端口号 "
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
这些配置都配置完成后重启activemq即可
测试:
在jconsole中进行测试,jconsole.exe程序在本机安装的jdk下的bin文件下


双击启动程序后会出现如下页面:

在远程进程这块写入ip地址,用户名和密码可以在activemq安装目录下的conf/jmx.password中查看,一般默认用户名是:admin 密码:activemq

登录成功后看到如下视图即为配置成功


activemq的jmx监控配置成功之后,通过java代码来获取jmx的监控信息
String jmxurl = "service:jmx:rmi:///jndi/rmi://IP地址:11099/jmxrmi";  //访问的监控地址
String userName = "admin";  
String userPwd = "activemq";  

String objectName =  "org.apache.activemq:brokerName=localhost,type=Broker"  //objectName可以在jconsole中查到

Map<String, String[]> iden = new HashMap<>(); 
String[] credentials = {userName, userPwd}; iden.put(JMXConnector.CREDENTIALS, credentials); 
JMXServiceURL url = new JMXServiceURL(jmxurl); 
JMXConnector jmxc = JMXConnectorFactory.connect(url, iden); 
MBeanServerConnection conn = jmxc.getMBeanServerConnection(); 
ObjectName objRootName = new ObjectName(objectName); 
String brokerName = (String) conn.getAttribute(objRootName, "BrokerName"); 
String brokerId = (String) conn.getAttribute(objRootName, "BrokerId"); 
String openWireUrl = (String) conn.getAttribute(objRootName, "OpenWireURL"); 
System.out.println(brokeName+brokeId+openWireUrl)
//遍历队列 
ObjectName[] objectNames = (ObjectName[]) conn.getAttribute(objRootName, "Queues"); 
List<String> blackList = monitorConfig.getQueueBlackList(); 
for (ObjectName queueName : objectNames) {
//注意此处的类型要和jconsole中监控的类型一样
Long queueSize = (Long) conn.getAttribute(queueName, "QueueSize");//队列消息数量 
Long producerCount = (Long) conn.getAttribute(queueName, "ProducerCount");//生产者数量 
Long consumerCount = (Long) conn.getAttribute(queueName, "ConsumerCount");//消费者数量 
Long enqueueCount = (Long) conn.getAttribute(queueName, "EnqueueCount");//入队消息总数 
Long dequeueCount = (Long) conn.getAttribute(queueName, "DequeueCount");//出队消息总数 
System.out.println(queueSize+produceCount+consumerCount+enqueueCount+dequeueCount)
}





参考博客:http://www.cnblogs.com/yjmyzz/p/active-mq-jmx-monitor.html













评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值