ActiveMQ笔记:管理和监控
ActiveMQ提供了比较丰富的监控和管理工具。在ActiveMQ的网页里(http://activemq.apache.org/how-can-i-monitor-activemq.html)提到了很多ActiveMQ自带以及第三方的监控管理工具。
本文主要介绍ActiveMQ自带的管理工具webconsole,基于Jolokia的开源的管理工具http://hawt.io/,以及使用ActiveMQ的Advisory messages来自己编程监控ActiveMQ的状态。
WebConsole
要使用WebConsole,需要在ActiveMQ的配置文件里加入jetty.xml。
<import resource="file:${activemq.conf}/jetty.xml"/>
Jetty.xml配置了ActiveMQ里使用的Jetty web服务器。通过该配置文件,使能了WebConsole和ActiveMQ内置的基于Jolokia的REST API。
另外,还需要修改jetty-realm.properties里的登陆名和密码。
完成配置后,可以通过http://${Host}:8161/admin/来访问WebConsole。通过WebConsole可以知道ActiveMQ的一些主要信息,如Queues,Topics,等。详细功能可以参见:http://activemq.apache.org/web-console.html。
Hawt.io
ActiveMQ提供了比较丰富的基于JMX的管理功能。使用,jconsole等JMX的管理工具可以通过JMX接口来管理ActiveMQ。但是,如果通过远程使用JMX,需要较多的配置工作。
开源的Jolokia项目,提供了通过REST API来访问JMX管理功能的能力。ActiveMQ内部已经集成了Jolokia类库,通过WebConsole相同的配置,可以使能基于Jolokia的REST API访问ActiveMQ。
Hawt.io是一个开源的使用Jolokia的第三方管理工具。该工具可以作为一个单独的jar文件执行,也可以作为一个war文件部署到Tomcat/Jetty等Servlet Container里。通过http://hawt.io/可以下载该工具。
使用Hawt.io,可以提供比WebConsole更丰富的管理功能。使用Hawt.io需要一些配置工作。
l 建立Hawt.io和ActiveMQ的连接时,port为8161,path为api/jolokia。(这些是ActiveMQ的缺省配置,可以在ActiveMQ的jetty.xml修改)
l 如果Hawt.io和ActiveMQ不在一台机器时,需要设置hawtio.proxyWhitelist这个JVM的system property来启动Hawt.io。如果是以jar文件运行Hawt.io,可以在启动的command line设置,如:
java -Dhawtio.proxyWhitelist=${Host},127.0.0.1,localhost -jar hawtio-app-1.5.7.jar
Advisory消息
ActiveMQ内部提供了一些管理的Topics,通过Advisory消息可以向这些Topics发送消息报告ActiveMQ内部的状态,例如Client Connection的建立,Queue的建立,Topics的建立等。ActiveMQ的网页(http://activemq.apache.org/advisory-message.html)提供了详细的Advisory消息的信息,包括Topics名字,Default使能的情况,以及PolicyEntry的配置名等。
ActiveMQ支持Client利用wildcasts来接收多个Channels的消息。所以可以自己编写程序,监听“ActiveMQ.Advisory.>.”,从而得到所有的Advisory的管理消息。
为了使用Advisory的消息,需要做一些配置。PolicyEntry的使能,需要根据管理的需要,部分使能下面的entry。
<broker advisorySupport="true">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" advisoryForConsumed="true"/>
<policyEntry topic=">" advisoryWhenFull="true"/>
<policyEntry topic=">" advisoryForDelivery="true"/>
<policyEntry topic=">" advisoryForDiscardingMessages="true"/>
<policyEntry topic=">" sendAdvisoryIfNoConsumers="true"/>
<policyEntry topic=">" advisoryForSlowConsumers="true"/>
<policyEntry topic=">" advisdoryForFastProducers="true"/>
</policyEntries>
</policyMap>
</destinationPolicy>