此文章重点在于
1.获取ActiveMQ队列的剩余消息数、出队数等
2.http://localhost:8161/admin/queues.jsp官方网页中的消息队列情况
前提:
1.java+SpringBoot
2.已经配置好ActiveMQ并成功启动后存入队列信息
例如:
正文:
1.在你下载activemq文件夹下的config中,找到activemq.xml,在broker节点增加useJmx=”true”
useJmx表示开启jmx监控
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" useJmx="true">
2.还是在activemq.xml中找到managementContext节点并更改
<managementContext>
<managementContext createConnector="true" connectorPort="11099"/>
</managementContext>
3.在bin目录下找到activemq文件,在文件最后一行添加如下信息
①. Windows系统
SUNJMX=-Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.password.file=%ACTIVEMQ_BASE%/conf/jmx.password
-Dcom.sun.management.jmxremote.access.file=%ACTIVEMQ_BASE%/conf/jmx.access
②. Unix系统
SUNJMX="-Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_BASE}/conf/jmx.password
-Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_BASE}/conf/jmx.access"
4.重启activemq.bat
5.java查询队列信息,在此用main方法来写,后续可以根据需求自行拆分
private String url="service:jmx:rmi:///jndi/rmi://localhost:11099/jmxrmi";
private String broker="org.apache.activemq:brokerName=localhost,type=Broker";
public static void main(String[] args) throws IOException, MalformedObjectNameException {
JMXServiceURL urls = new JMXServiceURL(url);
JMXConnector connector = JMXConnectorFactory.connect(urls,null);
connector.connect();
MBeanServerConnection conn = connector.getMBeanServerConnection();
ObjectName name = new ObjectName(broker);
BrokerViewMBean mBean = (BrokerViewMBean)MBeanServerInvocationHandler.newProxyInstance(conn, name, BrokerViewMBean.class, true);
for(ObjectName na : mBean.getQueues()){//获取点对点的队列 mBean.getTopics() 获取订阅模式的队列
QueueViewMBean queueBean = (QueueViewMBean)
MBeanServerInvocationHandler.newProxyInstance(conn, na, QueueViewMBean.class, true);
System.out.println("******************************");
System.out.println("队列的名称:"+queueBean.getName());
System.out.println("队列中剩余的消息数:"+queueBean.getQueueSize());
System.out.println("消费者数:"+queueBean.getConsumerCount());
System.out.println("出队列的数量:"+queueBean.getDequeueCount());
}
运行结果为: