如何通过 JConsole 连接到 ActiveMQ Artemis?

问题描述

我正在尝试通过 JConsole 连接到 ActiveMQ Artemis。但是,它似乎不起作用。

  • JDK 版本:1.8.0
  • ActiveMQ Artemis 版本:2.6.2

我尝试了以下带有和不带有用户/密码(管理员/管理员)的 URL。:

service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi 

service:jmx:rmi:///jndi/rmi://0.0.0.0:1099/jmxrmi

我的经纪人在本地运行。我只是解压缩它并创建了一个实例。这是我的management.xml

<management-context xmlns="http://activemq.org/schema">
  <connector connector-port="1099"/>
   <authorisation>
      <whitelist>
         <entry domain="hawtio"/>
      </whitelist>
      <default-access>
         <access method="list*" roles="amq"/>
         <access method="get*" roles="amq"/>
         <access method="is*" roles="amq"/>
         <access method="set*" roles="amq"/>
         <access method="*" roles="amq"/>
      </default-access>
      <role-access>
         <match domain="org.apache.activemq.artemis">
            <access method="list*" roles="amq"/>
            <access method="get*" roles="amq"/>
            <access method="is*" roles="amq"/>
            <access method="set*" roles="amq"/>
            <access method="*" roles="amq"/>
         </match>
         <!--example of how to configure a specific object-->
         <!--<match domain="org.apache.activemq.artemis" key="subcomponent=queues">
            <access method="list*" roles="view,update,amq"/>
            <access method="get*" roles="view,amq"/>
            <access method="is*" roles="view,amq"/>
            <access method="set*" roles="update,amq"/>
            <access method="*" roles="amq"/>
         </match>-->
      </role-access>
   </authorisation>
</management-context>

我尝试了以下方法

  1. <connector connector-port="1099"/> 文件中取消注释 management.xml
  2. artemis-service.xml 中取消注释:
    <!-- uncomment this if you want to connect jconsole to connect -->
    <argument>-Dcom.sun.management.jmxremote</argument>
    <argument>-Dcom.sun.management.jmxremote.port=1099</argument>
    <argument>-Dcom.sun.management.jmxremote.ssl=false</argument>
    <argument>-Dcom.sun.management.jmxremote.authenticate=false</argument>
    
  3. 添加artemis-service.xml
    <argument>-Dcom.sun.management.jmxremote.rmi.port=1099</argument>
    

解决方法

我刚刚通过执行以下操作在 ActiveMQ Artemis 2.6.2 中实现了此功能:

  1. 将 ActiveMQ Artemis 2.6.2 下载并解压到 <ACTIVEMQ_HOME>
  2. 打开终端并运行 cd <ACTIVEMQ_HOME>/bin
  3. 使用 ./artemis create ~/testJMX --user myUser --pass myPass --require-login
  4. 创建一个新的代理实例
  5. <connector connector-port="1099"/> 中取消注释 etc/management.xml
  6. 使用 ./artemis run
  7. 启动代理
  8. 使用 jconsole 命令启动 JConsole。
  9. 分别使用 service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmimyUser 作为用户名和密码将 JConsole 指向 myPass
  10. 观察 JConsole 是否正确连接并且所有 MBean 都可以访问。

我在 Linux 上使用了 JDK 1.8。我没有可以用来测试的 Windows 设备。

也有可能通过稍微更改步骤 #4 和 #7 来使其工作:

  1. 将 ActiveMQ Artemis 2.6.2 下载并解压到 <ACTIVEMQ_HOME>
  2. 打开终端并运行 cd <ACTIVEMQ_HOME>/bin
  3. 使用 ./artemis create ~/testJMX --user myUser --pass myPass --require-login
  4. 创建一个新的代理实例
  5. 删除 management-contextetc/management.xml 元素的所有内容,这样您就拥有以下内容:
    <management-context xmlns="http://activemq.org/schema" />
    
  6. 使用 ./artemis run
  7. 启动代理
  8. 使用 jconsole 命令启动 JConsole。
  9. 将 JConsole 指向本地 ActiveMQ Artemis 进程
  10. 观察 JConsole 是否正确连接并且所有 MBean 都可以访问。

一般来说,我建议您移至 latest version。 ActiveMQ Artemis 2.6.2 大约在 3 年前发布。自 2.6.2 发布以来,JMX 属性已从 artemis-service.xml 中删除,因为它们不再适用。有关详情,请参阅 ARTEMIS-2112

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...