java获取ActiveMq队列的监控信息

1.进入ActiveMq的目录的conf目录下,编辑activemq.xml文件

vi activemq.xml

2.找到下面的标签


    

3.修改该标签,开启JMX服务


    

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> getQueueMap () {
        List 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 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.监控页面

java获取ActiveMq队列的监控信息_第1张图片

你可能感兴趣的:(java获取ActiveMq队列的监控信息)