2016-09-13 17 views
1

Active MQ(バージョン5.13.0)の個々のキューを監視するjavaアプリケーションがあります。このアプリケーションの目的は、アクティブなMQブローカに接続し、特定のキューの飛行中のメッセージ数を調べることです。飛行中のメッセージ数が50を超える場合は、警告を送信します。このアプリケーションは、このチェックを10分ごとに実行します(Quartz Schedulerの使用)。 私はAMQに接続するためのIPアドレスを使用しています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クライアントと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はlocalhost (127.0.0.1)、あなたはここでipの 'JMXServiceURL("サービス:jmx:rmi:/// jndi/rmi://192.168.11.72:1099/jmxrmi ");' –

+0

あなたの返事に感謝しますか?次のようにブローカログの2つのWARNログ行を参照してください –

関連する問題