首先在 activemq.xml 中新增以下属性
在broker 节点新增属性 useJmx="true"
在managementContext 节点配置断开与访问服务iP
配置成功后启动
下面来看测试代码
/**
* @Title: ActivemqTest.java
* @Package activemq
* @Description: TODO(用一句话描述该文件做什么)
* @author LYL
* @date 下午2:25:59
* @version V1.0
*/
package activemq;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Map;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import org.apache.activemq.broker.jmx.BrokerViewMBean;
import org.apache.activemq.broker.jmx.QueueViewMBean;
/**
* @Title: ActivemqTest.java
* @Package activemq
* @Description: TODO(用一句话描述该文件做什么)
* @author LYL
* @date 下午2:25:59
* @version V1.0
*/
public class ActivemqTest {
public static void main(String[] args) throws Exception {
String ip = "127.0.0.1:8188";
String url = String.format("service:jmx:rmi:///jndi/rmi://%s/jmxrmi",ip);
Map credentials = new HashMap<>();
// credentials.put(JMXConnector.CREDENTIALS, new String[] {"admin", "admin"});
JMXServiceURL urls = new JMXServiceURL(url);
JMXConnector connector = JMXConnectorFactory.connect(urls,credentials);
connector.connect();
MBeanServerConnection conn = connector.getMBeanServerConnection();
ObjectName name = new ObjectName("org.apache.activemq:brokerName=localhost,type=Broker");
BrokerViewMBean mBean = (BrokerViewMBean)MBeanServerInvocationHandler.newProxyInstance(conn, name, BrokerViewMBean.class, true);
ObjectName[] pAry = mBean.getQueueSubscribers();
for (ObjectName objectName : pAry) {
}
ObjectName[] ary = mBean.getQueues();
for (ObjectName objectName : ary) {
QueueViewMBean queueBean = (QueueViewMBean) MBeanServerInvocationHandler.newProxyInstance(conn, objectName, QueueViewMBean.class, true);
System.out.println("队列的名称:"+queueBean.getName());
System.out.println("消息积压数:"+queueBean.getQueueSize());
System.out.println("入队:"+queueBean.getEnqueueCount());
System.out.println("出队:"+queueBean.getDequeueCount());
System.out.println("消费者数:"+queueBean.getConsumerCount());
System.out.println("生产者数:"+queueBean.getProducerCount());
}
}
}