首页 文章

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

提问于
浏览
12

我正在使用 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 Browser在我的PC上运行(10.0.0.200) .

当我尝试连接Apache ActiveMQ Browser时,连接会一直失败 . 我正在使用以下设置:

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 以确保没有防火墙是问题 . 但都失败了 .

我忘了什么吗?

3 回答

  • 15

    不幸的是,JMX需要两个端口才能正常运行 . 默认情况下,第二个(RMI注册表端口)被随机选取,导致防火墙等问题 .

    既然你可以使用JDK7u4

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

    设置要使用的RMI端口 .

  • 8

    经过几个小时的痛苦 . 连接防火墙后的魔力 .

    <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
    
  • 5

    如果您受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>
    

相关问题