Activemq 使用JMX远程连接到活动MQ

Activemq 使用JMX远程连接到活动MQ,activemq,jmx,Activemq,Jmx,我有一个java应用程序,用于监视活动MQ(版本5.13.0)上的各个队列。此应用程序的目标是连接到活动MQ代理,并找出特定队列的正在运行的消息计数。如果飞行中消息计数超过50,则会发送警报。此应用程序每10分钟执行一次此检查(使用Quartz Scheduler)。 当我连接到使用IP地址连接到AMQ的AMQ代理时,我收到带有以下堆栈跟踪的IOException- java.rmi.ConnectException: Connection refused to host: 127.0.

我有一个java应用程序,用于监视活动MQ(版本5.13.0)上的各个队列。此应用程序的目标是连接到活动MQ代理,并找出特定队列的正在运行的消息计数。如果飞行中消息计数超过50,则会发送警报。此应用程序每10分钟执行一次此检查(使用Quartz Scheduler)。 当我连接到使用IP地址连接到AMQ的AMQ代理时,我收到带有以下堆栈跟踪的IOException-

    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
注: 1.如果我在本地机器上安装AMQ,并将上面的代码部署在本地机器上运行的Tomcat上,它就可以工作了。我的意思是,当Java客户端和AMQ都在同一台机器上时,它就可以工作了。
2.我已经在AMQ服务器上完成了这里提到的必要配置 3.我已经通过telnet检查了代码中提到的与IP和端口的连接,并且正常工作。 4.我还记录了AMQ服务器机器上的TCP转储,我可以看到请求到达那里。 5.这两台机器(Tomcat和AMQ运行的地方)都不是虚拟机,而是同一网络中的专用物理机


请帮助:)

由于日志显示连接被拒绝,我认为连接配置错误。 你也需要这些证件

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

我现在能够使用JConsole和我编写的Java代码进行连接。问题在于env文件(在amqHome/bin/下)的属性java.rmi.server.hostname的值为127.0.0.1 我把这个值改为192.168.11.72(机器的IP),它工作了


谢谢大家的支持

谢谢你,哈森。但是仍然不走运:(你能发布代理日志吗?你说这两台机器(Tomcat和AMQ运行的地方)都不是虚拟机,而是同一网络中的专用物理机。但是jmx尝试连接到本地主机(127.0.0.1),你是否在这里使用ip
JMXServiceURL(“服务:jmx:rmi:///jndi/rmi://192.168.11.72:1099/jmxrmi")
Hassen感谢您的回复。我在代理日志中看到两行警告日志,如下2016-09-14 11:20:42423 |警告|传输连接到:tcp://192.168.11.219:10587 失败:org.apache.activemq.transport.InactivityIOException:无法发送,通道已失败:tcp://192.168.11.219:10587 |org.apache.activemq.broker.TransportConneaction.Transport |异步异常处理程序-2016-09-14 11:20:42346 | WARN |传输连接到:tcp://192.168.11.219:10587 失败:java.net.SocketException:Connection reset | org.apache.activemq.broker.TransportConnection.Transport | activemq传输:tcp:///192.168.11.219:10587@61616
JMXServiceURL url = ...;
Map env = ...;
String[] creds = {"admin", "activemq"};
env.put(JMXConnector.CREDENTIALS, creds);
JMXConnector jmxc = JMXConnectorFactory.connect(url, env);