问题描述
我正在尝试通过 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>
我尝试了以下方法:
- 在
<connector connector-port="1099"/>
文件中取消注释management.xml
- 在
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>
- 添加
artemis-service.xml
:<argument>-Dcom.sun.management.jmxremote.rmi.port=1099</argument>
解决方法
我刚刚通过执行以下操作在 ActiveMQ Artemis 2.6.2 中实现了此功能:
- 将 ActiveMQ Artemis 2.6.2 下载并解压到
<ACTIVEMQ_HOME>
- 打开终端并运行
cd <ACTIVEMQ_HOME>/bin
- 使用
./artemis create ~/testJMX --user myUser --pass myPass --require-login
创建一个新的代理实例
- 在
<connector connector-port="1099"/>
中取消注释etc/management.xml
。 - 使用
./artemis run
启动代理
- 使用
jconsole
命令启动 JConsole。 - 分别使用
service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
和myUser
作为用户名和密码将 JConsole 指向myPass
。 - 观察 JConsole 是否正确连接并且所有 MBean 都可以访问。
我在 Linux 上使用了 JDK 1.8。我没有可以用来测试的 Windows 设备。
也有可能通过稍微更改步骤 #4 和 #7 来使其工作:
- 将 ActiveMQ Artemis 2.6.2 下载并解压到
<ACTIVEMQ_HOME>
- 打开终端并运行
cd <ACTIVEMQ_HOME>/bin
- 使用
./artemis create ~/testJMX --user myUser --pass myPass --require-login
创建一个新的代理实例
- 删除
management-context
中etc/management.xml
元素的所有内容,这样您就只拥有以下内容:<management-context xmlns="http://activemq.org/schema" />
- 使用
./artemis run
启动代理
- 使用
jconsole
命令启动 JConsole。 - 将 JConsole 指向本地 ActiveMQ Artemis 进程。
- 观察 JConsole 是否正确连接并且所有 MBean 都可以访问。
一般来说,我建议您移至 latest version。 ActiveMQ Artemis 2.6.2 大约在 3 年前发布。自 2.6.2 发布以来,JMX 属性已从 artemis-service.xml
中删除,因为它们不再适用。有关详情,请参阅 ARTEMIS-2112。