[求解決]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;
        }      
}
 


上述代碼運行後結果如圖

然後將註釋行釋放的運行結果是這樣的:

我找了很多方法,仍然是沒有辦法解決,不知道有沒有大神幫個忙看看?

 

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