JAVA查询ActiveMQ详情

第一步:导入与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;
	}
}

对比输出结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值