1.进入ActiveMq的目录的conf目录下,编辑activemq.xml文件
vi activemq.xml
2.找到下面的标签
<managementContext>
<managementContext createConnector="false" />
</managementContext>
3.修改该标签,开启JMX服务
<managementContext>
<managementContext createConnector="true" connectorPort="1093"
connectorPath="/jmxrmi" jmxDomainName="org.apache.activemq"/>
</managementContext>
4.java代码
public class ActiveMqKit {
private static Logger log = Logger.getLogger(ActiveMqKit.class);
//和activemq.xml中添加的对应上
private static final String connectorPort = "1093";
private static final String connectorPath = "/jmxrmi";
private static final String jmxDomain = "org.apache.activemq";
//获取ActiveMq服务的ip
public static String getActiveMqIp () {
//从application.properties文件中获取 mq.url=tcp://xx.xx.xx.xx:61616
String mqUrl = PropKit.get("mq.url");
return mqUrl.substring(6).split(":")[0];
}
public static List<Map<String, Object>> getQueueMap () {
List<String, Object> list = new ArrayList<>();
JMXConnector conn = null;
BrokerViewMBean bean = null;
MBeanServerConnection connection = null;
try {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi//" +
getActiveMqIp() + ":" + connectorPort + connectorPath);
conn = JMXConnectorFactory.connect(url);
conn.connect();
connection = conn.getMBeanServerConnection();
ObjectName name = new ObjectName(jmxDomain +
":brokerName=localhost, type=Broker");
bean = MBeanServerInvocationHandler.newProxyInstance(connection, name,
BrokerViewMBean.class, true);
if (bean != null) {
for (ObjectName queueName : bean.getQueues()) {
QueueViewMBean queueBean = MBeanServerInvovationHandler.
newProxyInstance(connection, queueName, QueueViewMBean.class, true);
Map<String, Object> map = new HashMap<>();
map.put("queueName", queueBean.getName());//消息队列名称
map.put("queueSize", queueBean.getQueueSize());//队列剩余消息数
map.put("producerCount", queueBean.getProducerCount());//生产者数
map.put("consumerCount", queueBean.getConsumerCount());//消费者数
map.put("dequeueCount", queueBean.getDequeueCount());//出队数
map.put("enqueueCount", queueBean.getEnqueueCount());//入队数
list.add(map);
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
try {
if (conn != null) {
//关闭连接
conn.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
return list;
}
}
5.监控页面