第一步:开启jmx
找到一下路径下的文件:apache-activemq-5.16.2\conf\activemq.xml
以文本文件打开,修改一下两个参数
图一:在对应位置处天剑useJMX=“true”
图二:注意端口号,链接监听时需要
第二部:代码
//jmx服务地址,注意端口
String jmxserviceURL="service:jmx:rmi:///jndi/rmi://localhost:61618/jmxrmi";
//brokername是对应的ip
String objectName="org.apache.activemq:brokerName=localhost,type=Broker";
JMXServiceURL url = new JMXServiceURL(jmxserviceURL);
//用户名和密码
String[] credentials = new String[] { "admin", "admin" };
Map<String, String[]> props = new HashMap<String, String[]>();
props.put("jmx.remote.credentials", credentials);
JMXConnector connector = JMXConnectorFactory.connect(url, props);
connector.connect();
MBeanServerConnection connection = connector.getMBeanServerConnection();
ObjectName name = new ObjectName(objectName);
BrokerViewMBean mBean = (BrokerViewMBean) MBeanServerInvocationHandler.newProxyInstance(connection,
name, BrokerViewMBean.class, true);
for(ObjectName queueName : mBean.getQueues()) {
QueueViewMBean queueMBean =(QueueViewMBean)MBeanServerInvocationHandler.
newProxyInstance(connection, queueName, QueueViewMBean.class, true);
// ObjectName queueName=new //ObjectName("org.apache.activemq:type=Broker,brokerName=localhost,destinati//onType=Queue,destinationName="+消息队列名字);//创建监听的消息队列
QueueViewMBean queueMBean = (QueueViewMBean)MBeanServerInvocationHandler.
newProxyInstance(connection, queueName, QueueViewMBean.class, true);
System.out.println(queueName);
// 消息队列名称
System.out.println("States for queue: " + queueMBean.getName());
// 队列中剩余的消息数
System.out.println("size: " + queueMBean.getQueueSize());
// 消费者数
System.out.println("Number of consumers :" + queueMBean.getConsumerCount());
// 出队数
System.out.println("Number of dequeue :" + queueMBean.getDequeueCount() );
}