此文章重點在於
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());
}
運行結果爲: