[求解决]java监控activemq队列信息报错(java.lang.reflect.UndeclaredThrowableException)

首先我按照网上的要求配置了相关的activemq的配置信息

然后我编写了java测试代码

代码如下


package demo;

import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;

//import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

import org.apache.activemq.broker.jmx.BrokerViewMBean;
import org.apache.activemq.broker.jmx.DestinationViewMBean;
import org.apache.activemq.broker.jmx.QueueViewMBean;
import org.apache.activemq.broker.jmx.DestinationViewMBean;
import org.apache.activemq.broker.view.*;

public class ACJ {

     
         public static final String reportQueueName ="zc-queue-actual";//生成核对报告队列名
        private static final String connectorPort = "11099";
        private static final String connectorPath = "/jmxrmi";
        private static final String jmxDomain = "org.apache.activemq";


        public static PriorityQueue<MQQue> getAllQueue(String ip)throws Exception {
            
            String Surl = "service:jmx:rmi:///jndi/rmi://60.60.60.117:11099/jmxrmi";
            String userName = "admin";
            String userPwd = "activemq";
            Map<String, String[]> env = new HashMap<String, String[]>();
            String[] credentials = { userName, userPwd };
            env.put("jmx.remote.credentials", credentials);
            BrokerViewMBean mBean=null;
            MBeanServerConnection connection=null;
            ObjectName name =null;
            PriorityQueue<MQQue> ques=new PriorityQueue<MQQue>();
            try{
                JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://"+ip+":" + connectorPort + connectorPath);
                JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
                jmxc.connect();
                connection = jmxc.getMBeanServerConnection();
                name = new ObjectName(jmxDomain + ":brokerName=localhost,type=Broker");
                mBean = (BrokerViewMBean)MBeanServerInvocationHandler.newProxyInstance(connection, name, BrokerViewMBean.class, true);
            }catch (Exception e){
               System.out.println(e);
            }
            if(mBean!=null){
                System.out.println("success!");
                System.out.println(mBean.getBrokerName());
                for(ObjectName om : mBean.getQueues()){
                    System.out.println(om.getCanonicalName());
                    System.out.println(om.toString());
                    QueueViewMBean mq = (QueueViewMBean)MBeanServerInvocationHandler.newProxyInstance(connection,om,QueueViewMBean.class, true);
//                    System.out.println(mq.getConsumerCount());
                }

            }

            return ques;
        }      
}
 


上述代码运行后结果如图

然后将注释行释放的运行结果是这样的:

我找了很多方法,仍然是没有办法解决,不知道有没有大神帮个忙看看?

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章