第一步:导入与jmx相关的jar包
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-broker -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-broker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
第二步:修改ActiveMQ相关配置文件
//第一:打开conf/activemq.xml文件
//第二:在broker标签上加useJmx="true"属性。如下所示:
//特别注意:brokerName与下面的java文件中的brokerName要一致。
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"
useJmx="true">
</broker>
//第三:设置managementContext标签createConnector="true",端口自定义。
<managementContext>
<managementContext createConnector="true" connectorPort="10086"/>
</managementContext>
第三步:JAVA示例
public class ActiveMQUtil {
private final static Logger logger = LoggerFactory.getLogger(ActiveMQUtil.class);
static String URL = "service:jmx:rmi:///jndi/rmi://localhost:10086/jmxrmi";
//特别注意:brokerName与上面的xml文件中的brokerName要一致。
static String BROKER = "org.apache.activemq:brokerName=localhost,type=Broker";
public static void main(String[] args) throws Exception {
ActiveMQUtil.queuesInfo();
}
// 获取点对点的队列
public static ObjectName[] queuesInfo() throws Exception {
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);
if (mBean == null) {
logger.info("队列不存在,mBean=null。");
return null;
}
ObjectName[] queues = mBean.getQueues();
if (queues == null || queues.length == 0) {
logger.info("队列不存在,queues!=null||queues.length==0。");
return null;
}
for (ObjectName na : queues) {
QueueViewMBean queueBean = (QueueViewMBean) MBeanServerInvocationHandler.newProxyInstance(conn, na,
QueueViewMBean.class, true);
System.out.println("队列的名称:" + queueBean.getName());
System.out.println("队列中剩余的消息数:" + queueBean.getQueueSize());
System.out.println("队列对应的消费者数:" + queueBean.getConsumerCount());
System.out.println("队列出队消息的数量:" + queueBean.getDequeueCount());
}
return queues;
}
}
对比输出结果