java获取ActiveMq队列的监控信息

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.监控页面

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值