ActiveMQ的队列(主题)的几种操作方法

茴字有几种写法是孔乙己关心的事,ActiveMQ中如何操作队列或者主题则是我们苦逼程序猿关注的事。

很多程序猿盆友发问,如何查询ActiveMQ上的队列,或者如何清空,或者如何删除,或者……

大多数知道的盆友只会回答一句用JMX,但是JMX又如何用,群里各种大牛又都语焉不详。前段时间用ActiveMQ给客户演示,客户也提到了一些界面的设想,研究了下ActiveMQ的web控制台,发现还是自己实现比较靠谱。于是乎就研究了下如何使用JMX操作ActiveMQ的队列、主题。记录下来,以便其他程序猿盆友查阅备忘。

万变不离其宗,操作方式都是基于JMX的。我只测试、总结了如下3个方法:

  1. 基于内置web的jokolia接口。这个仅限于ActiveMQ5.8.0以后。在这个版本开始集成了jolokia,这是一种将JMX访问转换成rest方式访问的技术。有兴趣的自行拜访谷哥或者度娘。顺便说下,不翻墙访问谷哥可以用(http://wen.lu),反向代理的。

直接用httpget方式获取Broker上所有队列信息。

http://127.0.0.1:8161//api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/Queues

地址是默认的本机地址,端口是默认的内置jetty的8161端口,即web控制台的端口。brokerName是默认的localhost。

增删改查的其他方法继续往下看。

搜集资料的时候发现kimmking已经写过相应的文档的,这里给出地址,有需要去自行查阅 kimmking博客地址

原生JMX访问。因为用到了Broker的MBean,所以需要引入activemq-broker-5.10.0.jar,这里我用的是最新版。

String[] credentials = new String[] { "admin", "admin" };
Map<String, String[]> props = new HashMap<String, String[]>();
props.put("jmx.remote.credentials", credentials);
JMXServiceURL address = new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://127.0.0.1:11099/jmxrmi");
JMXConnector connector = JMXConnectorFactory.connect(address, props);
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
connector.connect();
ObjectName objectName = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost"); 
if (objectName != null) {
   BrokerViewMBean broker = JMX.newMBeanProxy(mbsc, objectName,
   BrokerViewMBean.class);
   System.out.println(Arrays.toString(broker.getQueues()));
}
connector.close();

这里仅做了如果获取broker上的所有队列。队列、主题的增删改查方法可以通过查看org.apache.activemq.broker.jmx.BrokerViewMBean的api定义来确定,伸手党也自己辛苦下了。

基于Web控制台定义的MBean。因为用到了web-console的MBean,所以需要引入activemq-web-5.10.0.jar,仍旧是最新版。

RemoteJMXBrokerFacade createConnector = new RemoteJMXBrokerFacade(); 
System.setProperty("webconsole.jmx.url", "service:jmx:rmi:///jndi/rmi://127.0.0.1:11099/jmxrmi");
SystemPropertiesConfiguration configuration = new SystemPropertiesConfiguration(); 
createConnector.setConfiguration(configuration); 
try { 
   BrokerViewMBean brokerAdmin = createConnector.getBrokerAdmin();  
   System.out.println(Arrays.toString(brokerAdmin.getQueues()));
} catch (Exception e) { 
   e.printStackTrace(); 
}

这里仅做了如果获取broker上的所有队列。队列、主题的增删改查方法可以通过查看org.apache.activemq.broker.jmx.BrokerViewMBean的api定义来确定,伸手党也自己辛苦下了。

这里再说一下ActiveMQ不知道哪个版本开始默认不开JMX端口了。

<managementContext>
            <managementContext createConnector="false"/>
</managementContext>

   要想打开JMX端口改成这样,不一定是11099,但是必须要没被系统或其他程序占用,且后续访问的端口和这个端口必须保持一直,这里指的是JMX方式,jolokia方式的以内嵌的Jetty端口为准:

<managementContext>
            <managementContext createConnector="true" connectorPort="11099" /> 
</managementContext>

事后看了下kimmking的博客,发现jmx访问已经有文章了,研究消息中间件尤其是ActiveMQ的可以好好拜读下。

转载于:https://my.oschina.net/heihuwudi/blog/348494

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值