我们知道ActiveMQ broker的管理接口是通过JMX方式提供的。

一个简单的访问方式就是通过jconsole,输入

service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi

需要注意的是:

1、默认JMX功能是没有打开的,需要在activemq.xml的broker配置上添加useJmx="true"

2、需要在managementContext里,修改为createConnector="true",(同时这里也可以修改jmx的端口和domain)

(参见http://activemq.apache.org/jmx.html

通过jconsole来操作还是不太方便。特别是某些时候我们需要把对broker和queue的管理集成到我们的管理系统中去。

这时候我们就需要通过JMX的编程接口来与broker进行交互了。

可以先写一个小程序,看看broker的jmx中都提供了什么东西。

package kk;

import java.util.Iterator;
import java.util.Set; import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL; public class TestJMX { public static void main(String[] args) throws Exception { String surl = "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"; JMXServiceURL url = new JMXServiceURL(surl);
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); System.out.println("Domains:---------------");
String domains[] = mbsc.getDomains();
for (int i = 0; i < domains.length; i++) {
System.out.println("\tDomain[" + i + "] = " + domains[i]);
} System.out.println("all ObjectName:---------------");
Set<ObjectInstance> set = mbsc.queryMBeans(null, null);
for (Iterator<ObjectInstance> it = set.iterator(); it.hasNext();) {
ObjectInstance oi = (ObjectInstance) it.next();
System.out.println("\t" + oi.getObjectName());
} System.out.println("org.apache.activemq:BrokerName=localhost,Type=Broker:---------------");
ObjectName mbeanName = new ObjectName("org.apache.activemq:BrokerName=localhost,Type=Broker");
MBeanInfo info = mbsc.getMBeanInfo(mbeanName);
System.out.println("Class: " + info.getClassName());
if (info.getAttributes().length > 0){
for(MBeanAttributeInfo m : info.getAttributes())
System.out.println("\t ==> Attriber:" + m.getName());
}
if (info.getOperations().length > 0){
for(MBeanOperationInfo m : info.getOperations())
System.out.println("\t ==> Operation:" + m.getName());
} jmxc.close(); } }

输出结果:

Domains:---------------
Domain[0] = JMImplementation
Domain[1] = com.sun.management
Domain[2] = java.lang
Domain[3] = org.apache.activemq
Domain[4] = java.util.logging
all ObjectName:---------------
java.lang:type=OperatingSystem
java.lang:type=MemoryPool,name=Perm Gen
java.lang:type=Memory
JMImplementation:type=MBeanServerDelegate
org.apache.activemq:BrokerName=localhost,Type=Producer,destinationType=Queue,destinationName=kk.qq,clientId=ID_bsb3-1381-1372146822218-0_1,producerId=ID_bsb3-1381-1372146822218-1_1_1_1
org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,Connection=ID_bsb3-1381-1372146822218-0_1
org.apache.activemq:BrokerName=localhost,Type=Subscription,persistentMode=Non-Durable,destinationType=Queue,destinationName=kk.qq,clientId=ID_bsb3-1381-1372146822218-0_1,consumerId=ID_bsb3-1381-1372146822218-1_1_1_1
org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,ViewType=address,Name=tcp_//127.0.0.1_1347
java.lang:type=GarbageCollector,name=MarkSweepCompact
org.apache.activemq:BrokerName=localhost,Type=Broker
org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Producer.Topic.kk.dp
org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Topic
java.lang:type=MemoryManager,name=CodeCacheManager
org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Connection
org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Queue
org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Consumer.Topic.kk.dp
org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,Connection=ID_bsb3-1346-1372146798953-0_1
java.lang:type=Compilation
org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,ViewType=address,Name=tcp_//127.0.0.1_1382
java.util.logging:type=Logging
java.lang:type=MemoryPool,name=Tenured Gen
org.apache.activemq:BrokerName=localhost,Type=Subscription,persistentMode=Non-Durable,destinationType=Topic,destinationName=ActiveMQ.Advisory.TempQueue_ActiveMQ.Advisory.TempTopic,clientId=ID_bsb3-1346-1372146798953-0_1,consumerId=ID_bsb3-1346-1372146798953-1_1_-1_1
java.lang:type=MemoryPool,name=Survivor Space
java.lang:type=Runtime
org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Producer.Queue.kk.qq
java.lang:type=GarbageCollector,name=Copy
org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=kk.qq
org.apache.activemq:BrokerName=localhost,Type=Subscription,persistentMode=Durable,subscriptionID=kk-dp-dc,destinationType=Topic,destinationName=kk.dp,clientId=kk-dp
java.lang:type=MemoryPool,name=Eden Space
org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Consumer.Queue.kk.qq
java.lang:type=Threading
org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=kk.dp
com.sun.management:type=HotSpotDiagnostic
java.lang:type=ClassLoading
org.apache.activemq:BrokerName=localhost,Type=Subscription,persistentMode=Non-Durable,destinationType=Topic,destinationName=ActiveMQ.Advisory.TempQueue_ActiveMQ.Advisory.TempTopic,clientId=ID_bsb3-1381-1372146822218-0_1,consumerId=ID_bsb3-1381-1372146822218-1_1_-1_1
java.lang:type=MemoryPool,name=Code Cache
org.apache.activemq:BrokerName=localhost,Type=Connector,ConnectorName=openwire
org.apache.activemq:BrokerName=localhost,Type=Broker:---------------
Class: org.apache.activemq.broker.jmx.BrokerView
==> Attriber:Uptime
==> Attriber:BrokerVersion
==> Attriber:Slave
==> Attriber:BrokerName
==> Attriber:Persistent
==> Attriber:TransportConnectors
==> Attriber:BrokerId
==> Attriber:Topics
==> Attriber:Queues
==> Attriber:TemporaryTopics
==> Attriber:TemporaryQueues
==> Attriber:TopicSubscribers
==> Attriber:DurableTopicSubscribers
==> Attriber:QueueSubscribers
==> Attriber:TemporaryTopicSubscribers
==> Attriber:TemporaryQueueSubscribers
==> Attriber:InactiveDurableTopicSubscribers
==> Attriber:TopicProducers
==> Attriber:QueueProducers
==> Attriber:TemporaryTopicProducers
==> Attriber:TemporaryQueueProducers
==> Attriber:DynamicDestinationProducers
==> Attriber:TotalEnqueueCount
==> Attriber:TotalDequeueCount
==> Attriber:TotalConsumerCount
==> Attriber:TotalProducerCount
==> Attriber:TotalMessageCount
==> Attriber:MemoryPercentUsage
==> Attriber:MemoryLimit
==> Attriber:StoreLimit
==> Attriber:StorePercentUsage
==> Attriber:TempLimit
==> Attriber:TempPercentUsage
==> Attriber:StatisticsEnabled
==> Attriber:OpenWireURL
==> Attriber:StompURL
==> Attriber:SslURL
==> Attriber:StompSslURL
==> Attriber:VMURL
==> Attriber:DataDirectory
==> Attriber:JMSJobScheduler
==> Operation:gc
==> Operation:stop
==> Operation:enableStatistics
==> Operation:addConnector
==> Operation:removeConnector
==> Operation:addNetworkConnector
==> Operation:removeNetworkConnector
==> Operation:stopGracefully
==> Operation:resetStatistics
==> Operation:disableStatistics
==> Operation:terminateJVM
==> Operation:addTopic
==> Operation:addQueue
==> Operation:removeTopic
==> Operation:removeQueue
==> Operation:createDurableSubscriber
==> Operation:destroyDurableSubscriber
==> Operation:reloadLog4jProperties
==> Operation:getTransportConnectorByType
==> Operation:start

上面只是拿到了broker的属性和操作,同理也可以拿到其它对象的属性和操作列表。
根据这些,我们就可以拿到broker,connector,producer,consumer,queue,topic,Subscription等等的Object对象,进一步的操作他们。

待续。

JMX操作ActiveMQ(1)的更多相关文章

  1. JMX操作ActiveMQ(2)

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

  2. cassandra高级操作之JMX操作

    需求场景 项目中有这么个需求:统计集群中各个节点的数据量存储大小,不是记录数. 一开始有点无头绪,后面查看cassandra官方文档看到Monitoring章节,里面说到:Cassandra中的指标使 ...

  3. 消息中间件系列之Java API操作ActiveMQ

    一.依赖 <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activem ...

  4. JMX操作实例--做一回技术控

    我来做一回技术控,这部分内容也是简单的API调用例子而已,做一回技术控,发点小骚文,不过你看了,也许知道JConsole是怎么做出来的了,呵呵! 先不用管他干什么,代码运行后,自己改改自然知道做什么的 ...

  5. ActiveMQ in Action(1) - JMS

    关键字: activemq 1 JMS    在介绍ActiveMQ之前,首先简要介绍一下JMS规范.1.1 JMS的基本构件1.1.1 连接工厂    连接工厂是客户用来创建连接的对象,例如Acti ...

  6. ActiveMQ 基于zookeeper的主从(levelDB Master/Slave)搭建以及Spring-boot下使用

    0:说明 ActiveMQ 5.9.0新推出的主从实现,基于zookeeper来选举出一个master,其他节点自动作为slave实时同步消息.因为有实时同步数据的slave的存在,master不用担 ...

  7. ActiveMQ (一):安装启动及测试

    1. 预备知识 1.1 JMS JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范.<百科> 1.2 JMX JMX(Java M ...

  8. activemq用户手册

    1 JMS 在介绍ActiveMQ之前,首先简要介绍一下JMS规范. 1.1 JMS的基本构件 1.1.1 连接工厂 连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQCon ...

  9. 转--activemq的官方中文文档

    1 JMS 在介绍ActiveMQ之前,首先简要介绍一下JMS规范. 1.1 JMS的基本构件 1.1.1 连接工厂 连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQCon ...

随机推荐

  1. HDU ACM 1098 Ignatius&#39;s puzzle

    分析:裴蜀定理,a,b互质的充要条件是存在整数x,y使ax+by=1.存在整数x,y,使得ax+by=c.那么c就是a,b的公约数. 如果存在数a ,由于对随意x方程都成立.则有当x=1时f(x)=1 ...

  2. EasyUI - DataGrid 组建 - [ 组件加载和分页 ]

    效果: 原理:通过POST传递到数据后台字段. 此时上传的参数,page:当前页数,rows:每页显示的页数. 有此两项参数,计算取出数据条数. 通过后台接受参数,进行处理并返回抽取的数据. html ...

  3. HTML&JS笔记(1)

    canvas基本绘图 <!DOCTYPE html> <html> <body> <meta charset="utf-8"> &l ...

  4. DDD领域驱动设计的理解

    DDD领域驱动设计的理解 从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能 ...

  5. Codility上的问题 (17) PI 2012

    这个题比较简单,给定一个整数数组,对每个元素,求出和它最近比它大的数的距离(下标绝对值),如果没有比它大的数,认为距离是0. 数组元素个数 N [0..50000],数组元素范围[-10^9, +10 ...

  6. 设计模式之Prototype(c++)

    Prototype模型: 作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象----克隆(clone)对象. Prototype模型类图如下: 形象说明:如果客户想配钥匙(Conc ...

  7. 解决Ajax.BeginForm还是刷新页面的问题

    在.net mvc中用Ajax.BeginForm来实现异步提交,在Ajax.BeginForm里面还是可以用submit按钮,一般来说 submit按钮是提交整个页面的数据.但是在Ajax.Begi ...

  8. Thymeleaf模板的使用

    使用模板的要点:     页面主体结构固定,具体参数可变,尽可能让参数动态化,才能提高模板的复用性 ================================================== ...

  9. 关于Delphi XE2的FMX的一点点研究之消息篇

    Delphi XE2出来了一阵子了,里面比较抢眼的东西,除了VCLStyle这个换肤的东西之外,另外最让人眼亮的应该是FMX这个东西了.万一的博客上都连载了一票的关于FMX的使用心得了.我还是没咋去关 ...

  10. VC 实现视图区背景颜色渐变填充

    void CSTest1View::OnDraw(CDC* pDC) { CSTest1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO:  ...