jconsole 通过网络监控 ActiveMQ

技术永不眠Q0 2011-10-09

直接下载最新版ActiveMQ

1、 ${ACTIVEMQ_HOME}/conf/activemq.xml 中的 broker 节点增加  useJmx="true" 属性

2、 ${ACTIVEMQ_HOME}/conf/activemq.xml 中的 managementContext 节点修改成如下样子

<managementContext>

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

</managementContext>  

3、 ${ACTIVEMQ_HOME}/bin/activemq (linux环境) 中,找到 SUNJMX 的配置区域,不同版本会有不同的配置方法

      我在5.5这个版本下找到 ACTIVEMQ_SUNJMX_START 变量来对 SUNJMX 进行配置,默认是注释的,不需要做任何 修改,直接增加如下语句即可:

ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Djava.rmi.server.hostname=自己的IP"

注:如果只改第 1、2 步,也可以用 jconsole 通过 11099 端口监控运行状态,但是只能在本机进行监控。

至此,通过 activemq start 命令启动服务后,就可以通过网络对 本机IP的11099端口进行 JMX 监控了,

不过说实在的,用jconsole或者 jvisualvm 也监控不出什么实质性的东西,主要还得用 activemq 自己提供的监控

API来检查服务器运行状态,这个比较靠谱。

比如如下代码:

RemoteJMXBrokerFacade createConnector = new RemoteJMXBrokerFacade();  

System.setProperty("webconsole.jmx.url","service:jmx:rmi:///jndi/rmi://192.168.137.2:11099/jmxrmi");

System.setProperty("webconsole.jmx.user", "admin");  

System.setProperty("webconsole.jmx.password", "activemq"); 

SystemPropertiesConfiguration configuration = new SystemPropertiesConfiguration();  

createConnector.setConfiguration(configuration);

try {

BrokerViewMBean brokerAdmin = createConnector.getBrokerAdmin();

System.out.println("==========Connection =================");  

System.out.println("BrokerName =" + brokerAdmin.getBrokerName());  

System.out.println("TotalMessageCount =" + brokerAdmin.getTotalMessageCount());  

System.out.println("TotalConsumerCount =" + brokerAdmin.getTotalConsumerCount());  

System.out.println("TotalDequeueCount =" + brokerAdmin.getTotalDequeueCount());  

System.out.println("TotalEnqueueCount =" + brokerAdmin.getTotalEnqueueCount()); 

Collection<TopicViewMBean> topicViewList = createConnector.getTopics();  

for (TopicViewMBean topicViewMBean : topicViewList) {  

System.out.println("=============Topic =================");  

   System.out.println("beanName =" + topicViewMBean.getName());  

   System.out.println("ConsumerCount ="+ topicViewMBean.getConsumerCount());  

   System.out.println("DequeueCount ="+ topicViewMBean.getDequeueCount());  

   System.out.println("EnqueueCount ="+ topicViewMBean.getEnqueueCount());  

   System.out.println("DispatchCount ="+ topicViewMBean.getDispatchCount());  

   System.out.println("ExpiredCount ="+ topicViewMBean.getExpiredCount());  

   System.out.println("MaxEnqueueTime ="+ topicViewMBean.getMaxEnqueueTime());  

   System.out.println("ProducerCount ="+ topicViewMBean.getProducerCount());  

   System.out.println("MemoryPercentUsage ="+ topicViewMBean.getMemoryPercentUsage());  

   System.out.println("MemoryLimit =" + topicViewMBean.getMemoryLimit());  

}

} catch (Exception e) {

e.printStackTrace();

}

只演示一下API,更多的应用可以通过 API 文档得到解释。

相关推荐