当前位置: 首页 > 知识库问答 >
问题:

jmx似乎不能与activeMQ一起工作

鞠源
2023-03-14

我试图将JMX与activeMQ一起用于监控。到目前为止,我一直将其作为参考,但到目前为止我无法远程连接到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>

我恢复了我为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.password中设置了密码:

admin activemq

现在ACTIVEMQ根本没有运行,但如果我设置AUTHENTICATE=FALSE并删除JMX,它将运行。访问和JMX。BIN/ACTIVEMQ文件中的密码配置,但出于安全原因,我需要用户名和密码。我发现这篇文章与我的问题完全相同。有什么想法吗?

共有2个答案

邴烨
2023-03-14

几个故障排除步骤:

>

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

    运行netstat-na并确认端口1099(和44444)处于侦听状态

    查看日志并确认您没有任何“Java . net . bind exception:Address used 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"
    

  • 葛安和
    2023-03-14

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

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

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

    更新

    所以,继续说,我认为你尝试的第一步是最好的,为了让它工作,这些是步骤:

    >

  • 恢复所有 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"
    

    <代码>

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

    验证您是否在 AMQ 日志中具有

    INFO|JMX控制台可以连接服务:jmx: rmi://jndi/rmi://localhost:1099/jmxrmi|org.apache.activemq.broker.jmx.ManagementContext|JMX连接器

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

    尝试从AMQ主机以外的另一台机器使用url"service: jmx: rmi:///jndi/rmi://10.10.10.16:1099/jmxrmi"连接j控制台而不使用user/pwd。

    如果无法连接,请尝试如下方式:

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

    验证您是否在 AMQ 日志中具有

    < code>INFO | JMX控制台可以连接到服务:JMX:RMI:///JNDI/RMI://10 . 10 . 10 . 16:1099/JMX RMI | org . Apache . ActiveMQ . broker . JMX . management context | JMX连接器

    重试连接,步骤 4

    在这一步,通常您可以连接jconsole。

    <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的错误消息。

  •  类似资料:
    • 我试图调用直接将一个项目添加到初始的中,如下所示,其中是我编写的PowerShell类(下面的示例使用类名: 但是,这会产生一个错误,提示它找不到此构造函数的重载: 找不到“列表`1”和参数计数“1”的重载。 虽然这样做有效,但我不确定为什么我不能使用我的PowerShell类作为类型。我的理解是,只有上下文绑定类型和(默认情况下)嵌套类型不能与泛型一起使用,但以下显示我的类不是: 我不确定Pow

    • 我的代码看起来像 我的文件如下所示 当我运行程序时,我看到 我怎样才能修好它呢?

    • 我正在使用mulestudio。我希望使用mule studio在jms队列中插入值。但是我已经做了所有需要的更改,但是队列没有在activemq中创建,我使用的是activemq-5.8.0版本,即使我添加了jar文件,我的配置也是 我已按照文档执行,但无法获得预期的队列我的错误日志是 你会帮助这一点,以及如何消费来自骡子给我任何例子文件的信息

    • 我试图使用Keycloak AuthzClient在资源服务器中注册资源和相关权限。 我有一个启用authz服务的资源服务器“ResourceServer”。 使用AuthzClient(使用包含资源服务器客户机id和机密的json文件初始化),我可以获得PAT。 首先使用密码授权获取访问令牌: 然后将其交换为RPT: 我一直在试图理解为什么会这样。我还尝试在UmaPermissionRepres

    • /应用程序 index.html --sass ----style.scss --/css ----style.css Gulp CLI版本2.0.1和本地版本4.0.0 运行可以正确运行sass函数并编译我的sass文件。运行启动手表。。。 如果我在style.scss中更改一些样式并保存文件,我会得到: 但没有任何更改传播到css/style.css. 任何帮助都将不胜感激。

    • 问题内容: 我在使用该功能时遇到了麻烦。 我只需要知道SQL查询是否返回零行。 我已经尝试过以下简单的语句: 类型是哪里。上面的代码似乎不起作用。无论是否为空,它将始终打印该消息。 我检查了SQL查询本身,当存在行时它正确返回了非空结果。 关于如何确定查询是否已返回0行的任何想法?我用谷歌搜索,找不到任何答案。 问题答案: ResultSet.getFetchSize()不返回结果数!从这里: 使