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

運行結果爲:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章