2016-09-13 119 views
1

我有一個Java應用程序用於監視Active MQ(版本5.13.0)上的各個隊列。此應用程序的目標是連接到Active MQ代理,並找出特定隊列的正在進行的消息計數。如果在線消息計數超過50,則發送警報。此應用程序每10分鐘執行一次此檢查(使用Quartz Scheduler)。 當我連接到它使用的IP地址連接到AMQ的AMQ經紀人,我收到IOException,使用下面的堆棧跟蹤 -使用JMX遠程連接到Active-MQ

java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
     java.net.ConnectException: Connection refused: connect 
     at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source) 
     at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source) 
     at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source) 
     at sun.rmi.server.UnicastRef.invoke(Unknown Source) 
     at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source) 
     at javax.management.remote.rmi.RMIConnector.getConnection(Unknown Source) 
     at javax.management.remote.rmi.RMIConnector.connect(Unknown Source) 
     at javax.management.remote.JMXConnectorFactory.connect(Unknown Source) 
     at javax.management.remote.JMXConnectorFactory.connect(Unknown Source) 
     at com.globalcharge.quartz.job.CheckPendingConsumer.execute(CheckPendingConsumer.java:51) 
     at org.quartz.core.JobRunShell.run(JobRunShell.java:202) 
     at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525) 
Caused by: java.net.ConnectException: Connection refused: connect 
     at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
     at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
     at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
     at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
     at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
     at java.net.PlainSocketImpl.connect(Unknown Source) 
     at java.net.SocksSocketImpl.connect(Unknown Source) 
     at java.net.Socket.connect(Unknown Source) 
     at java.net.Socket.connect(Unknown Source) 
     at java.net.Socket.<init>(Unknown Source) 
     at java.net.Socket.<init>(Unknown Source) 
     at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source) 
     at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source) 
     ... 12 more 

我使用下面的代碼在連接到AMQ經紀人JMX

JMXServiceURL url = new  JMXServiceURL("service:jmx:rmi:///jndi/rmi://192.168.11.72:1099/jmxrmi"); 
JMXConnector jmxc = JMXConnectorFactory.connect(url); 
MBeanServerConnection conn = jmxc.getMBeanServerConnection(); 

ObjectName activeMq = new ObjectName("org.apache.activemq:Type=Broker,BrokerName=localhost"); 

BrokerViewMBean mbean = (BrokerViewMBean)MBeanServerInvocationHandler.newProxyInstance(conn, activeMq, BrokerViewMBean.class, true); 
//for each queue 
for(ObjectName name : mbean.getQueues()) 
{ 
    if(("dbg.notmanager.netsizeDelivery".equals(name))) 
    { 
     //obtain an instance of QueueViewMBean 
     QueueViewMBean queueMbean = (QueueViewMBean)MBeanServerInvocationHandler.newProxyInstance(conn, name, QueueViewMBean.class, true); 
     long inFlight = queueMbean.getInFlightCount(); 
     if(inFlight >= 50) 
     { 
      sender.sendPassiveCriticalAlert(hostname, "Passive.GCDBG", "InFlight Messages for a consumer on " + name); 
     }   
} 

注:1。 如果我安裝我的本地機器上的AMQ和Tomcat上我的本地機器它適用於運行部署上面的代碼。我的意思是,當(Java Client和AMQ)在同一臺機器上時,它就可以工作。
2.我已經在AMQ服務器上完成了必要的配置,如此處所述configure JMX for ActiveMQ for remoting access 3.我已經檢查了通過telnet在代碼中提到的與IP和端口的連接,它可以工作。 4.我還記錄了AMQ服務器計算機上的TCP轉儲,我可以看到請求到達那裏。 5.兩臺機器(運行Tomcat和AMQ的地方)都不是虛擬機,而是同一網絡中的專用物理機器。

請幫助:)

回答

0

我能夠立即連接使用JConsole的,以及我所寫的Java代碼。問題出在env文件(在amqHome/bin /下)有一個值爲127.0.0.1的屬性java.rmi.server.hostname 我將此值更改爲192.168.11.72(機器的IP)並且它工作正常....

感謝所有的支持....

0

原木說Connection refused,我想連接CONFIGS錯誤。 你需要這些憑據太

JMXServiceURL url = ...; 
Map env = ...; 
String[] creds = {"admin", "activemq"}; 
env.put(JMXConnector.CREDENTIALS, creds); 
JMXConnector jmxc = JMXConnectorFactory.connect(url, env); 
+0

非常感謝哈森。但是仍然沒有運氣:( –

+0

可以發佈代理日誌,你說**兩臺機器(Tomcat和AMQ運行的地方)都不是虛擬機,而是同一網絡中的專用物理機器**但是jmx嘗試連接到本地主機(127.0.0.1),你是在這裏'sur的IP JMXServiceURL(「service:jmx:rmi:/// jndi/rmi://192.168.11.72:1099/jmxrmi」);' –

+0

哈森感謝您的回覆。請參閱代理日誌中的兩條WARN日誌行,如下所示 –