jmx 似乎没有与 activeMQ 一起工作

jmx doesnt seem to be working with activeMQ

到目前为止,我一直在尝试将 JMX 与 activeMQ 结合使用进行监控,我一直在使用 this and this 作为参考,但到目前为止,我无法远程连接到 jmx,而且我也看不到在 activemq 日志中提到任何 jmx url。我想知道是否有另一种方法可以确保 jmx 正常工作?它应该在 activemq 日志中指示吗? PS 我正在使用 jdk1.7 和 activeMQ 5.14.2。

提前致谢!

编辑

我在 activemq.xml 文件中设置了 useJmx="true":

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="primary" useJmx="true" dataDirectory="${activemq.data}">

我尝试了两个步骤:

第一个

我尝试将管理上下文从 createConnector="false" 更改为 :

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

第一次打开端口并且 ACTIVEMQ 运行良好并且 JMX URL 在日志中得到报告虽然我无法将它连接到它远程但我假设它的工作

第二个

我还原了对 managmentContext 所做的更改,并尝试设置:

ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_BASE}/jmx.password -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_BASE}/jmx.access"

在 bin/activemq 脚本中,我在 conf/jmx.access 文件中设置了一个用户名:

admin readwrite

并且还在conf/jmx中设置了密码。密码:

admin activemq

NOW ACTIVEMQ IS NOT RUNNINT AT ALL BUT IT WILL RUN IF I SET AUTHENTICATE=FALSE AND DELETE JMX.ACCESS AND JMX.PASSWORD CONFIGURATION IN BIN/ACTIVEMQ FILE BUT I NEED USER NAME AND PASSWORD FOR SECURITY REASONS I found this post which has the exact same issue as mine. any ideas?

一些故障排除步骤:

  1. 在同一系统上启动 jconsole 或 visualvm,并使用 "pid" 附加方法进行连接。浏览 MBean 并确认存在 org.apache.activemq 个 bean

  2. 运行 netstat -na 并确认端口 1099(和 44444)在 LISTEN

  3. 查看日志并确认您没有任何 "java.net.BindException: Address already in use.." 消息表明端口与已经 运行 Java 进程发生冲突。

编辑 bin/env 以配置 JMX(这将禁用对 SSL 的要求,将端口设置为 1099 并禁用对用户名和密码的要求。

ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=1099 "
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false "
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote "
# 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"

默认启用远程监控的密码验证。要禁用它,请在启动 JVM 时设置以下系统 属性: -Dcom.sun.management.jmxremote.authenticate=false 就像你在第二次测试中所做的那样,但你需要添加系统 属性 -Dcom.sun.management.jmxremote

尝试将这些 jvm 参数添加到 env 文件并更新主机 ip

-Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=X.X.X.X

更新

所以,为了继续,我认为您尝试的第一步是最好的,为了使其正常工作,这些步骤是:

  1. 还原所有 jmx env 文件更改,如下所示:

        # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=1099 "
        # 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"
    
  2. <broker useJmx="true" ...

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

验证在 AMQ 日志中您有

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

注意:假设10.10.10.16是AMQ主机的IP。

  1. 尝试使用 url "service:jmx:rmi:///jndi/rmi://10.10.10.16:1099/jmxrmi" 不使用 user/pwd.[ 从另一台机器而非 AMQ 主机连接 jconsole =25=]

  2. 如果无法连接,请这样尝试:

    <managementContext>
      <managementContext createConnector="true"  connectorPort="1099"  connectorHost="10.10.10.16" />
    </managementContext>
    

验证在 AMQ 日志中您有

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

  1. 重试连接,第 4 步

  2. 这一步正常就可以连接jconsole了

  3. 如果你想添加安全和授权,使用这个:
<managementContext>
  <managementContext  createConnector="true"  connectorPort="1099"  connectorHost="10.10.10.16" >
      <property xmlns="http://www.springframework.org/schema/beans" name="environment">
          <map xmlns="http://www.springframework.org/schema/beans">
              <entry xmlns="http://www.springframework.org/schema/beans" key="jmx.remote.x.password.file"
                     value="${activemq.conf}/jmx.password"/>
              <entry xmlns="http://www.springframework.org/schema/beans" key="jmx.remote.x.access.file"
                     value="${activemq.conf}/jmx.access"/>
          </map>
      </property>
  </managementContext>
</managementContext>

请尝试这些步骤,让我知道您在哪个步骤中连接失败,并提供来自 jconsole 的错误消息。