ActiveMQ查询队列剩余消息数、出队数等(ActiveMQ获取消息队列现有消息情况)

此文章重点在于

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());
        }

运行结果为:

发布了40 篇原创文章 · 获赞 43 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_37581708/article/details/102973842
今日推荐