Apache ActiveMQ 浏览器无法连接到 JMX 控制台

Posted

技术标签:

【中文标题】Apache ActiveMQ 浏览器无法连接到 JMX 控制台【英文标题】:Apache ActiveMQ browser can't connect to JMX console 【发布时间】:2013-10-06 05:52:03 【问题描述】:

我正在使用Apache ActiveMQ version 5.8.0,我下载了Apache ActiveMQ Browser version 2.5.2.8

在 Apache ActiveMQ 中,我编辑了 activemq.xml 配置以使用 JMX:

<broker xmlns="http://activemq.apache.org/schema/core" useJmx="true" brokerName="localhost" dataDirectory="$activemq.data">
  <!-- This needed to be set to true, otherwise JMX won't start in 5.8.0 -->
  <managementContext>
    <managementContext createConnector="true"/>
  </managementContext>
</broker>

在启动脚本中,我将 JMX 设置如下:

#ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=11099 "
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=$ACTIVEMQ_CONF/jmx.password"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=$ACTIVEMQ_CONF/jmx.access"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"

当我重新启动 Apache ActiveMQ 时,日志显示 JMX 已启动并可访问:

JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi | org.apache.activemq.broker.jmx.ManagementContext | JMX connector

同时检查端口是否正在监听结果到监听端口:

[me@server ~]$ netstat -lptun | grep 1099
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 :::1099                     :::*                        LISTEN      16775/java

Apache ActiveMQ 正在服务器上运行。例如在 IP 10.0.0.100 上。 Apache ActiveMQ 浏览器在我的 PC (10.0.0.200) 上运行。

当我尝试连接 Apache ActiveMQ 浏览器时,连接一直失败。我正在使用以下设置:

 JMX URL: service:jmx:rmi:///jndi/rmi://10.0.0.100:1099/jmxrmi
 JMX role: admin
 JMS password: activemq

此时我在 jmx.passwordjmx.access 中保留了默认用户名和密码。

我还尝试在使用 putty 连接时为端口 1099 创建一个隧道到本地端口 1099,然后连接到 localhost 而不是 10.0.0.100 以确保没有防火墙是问题。但一切都失败了。

我是不是忘记了什么?

【问题讨论】:

【参考方案1】:

不幸的是,JMX 需要两个端口才能正常运行。第二个(RMI 注册端口)默认是随机选择的,会导致防火墙等问题。

由于JDK7u4可以使用

-Dcom.sun.management.jmxremote.rmi.port=<port>

设置要使用的RMI端口。

【讨论】:

我不知道使用了第二个端口。谢谢!【参考方案2】:

经过数小时的痛苦。在防火墙后面连接的魔力。

<managementContext>
  <managementContext createConnector="true" rmiServerPort="1098"  connectorPort="1099"  />
</managementContext>

示例连接字符串:

service:jmx:rmi://10.0.4.14:1098/jndi/rmi://10.0.4.14:1099/jmxrmi

【讨论】:

【参考方案3】:

如果受JDK版本限制,无法使用-Dcom.sun.management.jmxremote.rmi.port,也可以在managementContext本身指定RMI注册端口。

<broker xmlns="http://activemq.apache.org/schema/core" useJmx="true" brokerName="localhost" dataDirectory="$activemq.data">
    ...
    <managementContext>
        <managementContext connectorPort="1099" rmiServerPort="<port>" />
    </managementContext>
    ...
</broker>

【讨论】:

【参考方案4】:

对我来说,我得到了这个:Connection refused to host: ; nested exception is: ....,即使它是 TCP 在其 jmx 端口上侦听。

似乎我还需要 -Djava.rmi.server.hostname=my.local.ip.address 然后它使用正常的连接 url

 service:jmx:rmi:///jndi/rmi://host:your_jmxremote_port/jmxrmi

不知道为什么……

可能在activemq方面也需要这个,不确定:

--jmxurl service:jmx:rmi:///jndi/rmi://127.0.0.1:11099/jmxrmi

【讨论】:

以上是关于Apache ActiveMQ 浏览器无法连接到 JMX 控制台的主要内容,如果未能解决你的问题,请参考以下文章

Python stompest 无法通过 SSL 连接到 ActiveMQ

Android MQTT 客户端无法重新连接到 ActiveMQ

无法连接到 LAN 上的 Apache 服务器

在 Win XP 64 位上,无法连接到 XAMPP 下的本地 apache 安装。帮助!

如何通过javascript 使用 MQTT

5000 毫秒后无法连接到代理 URL [JMS]