ActiveMQ的特性之一是很好的支持JMX。经过JMX MBeans能够很方便的监听和控制ActiveMQ的broker。html
鉴于官方网站提供的JMX特性说明对于远程访问的配置流程不是很完整,笔者在实际配置时也走了一点弯路。因此本文将根据笔者的实际经验,分别讲解如何在windows和Linux环境下配置ActiveMQ的JMX远程访问。除此以外,还会从“是不是密码保护”的方面讲解。java
本文的JMX客户端环境为Windows7下的JDK1.7。windows
没有密码保护的远程访问的配置很简单,只需稍微修改activemq.xml中的配置便可。配置以下:安全
在<broker>节点中加入useJmx属性,并修改<managementContext>节点中的createConnector属性:服务器
<broker ... useJmx="true"> ... <managementContext> <managementContext createConnector="true"/> </managementContext> </broker>
其中,默认访问端口为1099,也能够经过<managementContext>节点中的connectorPort属性修改。启动activemq后,日志中出现如下信息表示配置成功了。oracle
INFO | JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
在windows7命令行中启动jconsole,选择“远程进程”,在URL中输入将localhost替换成实际IP后的上述信息,无需用户名和口令。便可连接成功。如图:ide
Lunix平台的下配置与windows一模一样,但需额外增长以下配置:网站
<broker ... useJmx="true"> ... <managementContext> <managementContext createConnector="true" connectorHost="本机的IP"/> </managementContext> </broker>
或修改Linux服务器系统文件/etc/hosts中的localhost设置,将127.0.0.1更改成实际IP(不建议)。ui
不然客户端没法经过将localhost替换成实际IP后远程访问JMX。spa
有密码保护的配置相对较复杂,须要修改JVM参数,主要步骤以下:
1、确认ActiveMQ默认的链接器已经关闭。注意createConnector=false
<broker ... useJmx="true"> ... <managementContext> <managementContext createConnector="false"/> </managementContext> </broker>
2、确认conf目录下有jmx.access(用户权限)和jmx.password(用户密码)两个文件(安装时默认会有),并按照格式填写内容(参考官方文档)
3、修改jmx.password的读取权限,目的是除归属用户外,其它用户不能有权限读写,这个是难点,对于笔者使用的win7系统,按以下方式修改。
右键jmx.password文件>属性>安全>高级>权限,将“包括可从该对象的父项继承的权限”勾掉,弹出警告选择“添加”
而后删除全部用户,一路肯定。此时这个文件已经不能访问和修改。若想从新修改内容,右键jmx.password文件>属性>安全>高级>权限>添加,将用户添加进来便可。
4、修改bin\activemq.bat文件。找到set SUNJMX=语句处,主要不是带REM(注释掉)的那一行将SUNJMX值设置为
set SUNJMX=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=%ACTIVEMQ_BASE%/conf/jmx.password -Dcom.sun.management.jmxremote.access.file=%ACTIVEMQ_BASE%/conf/jmx.access
好了,如今经过jconsole远程连接,填写URL,注意端口为1616,输入用户名密码,链接成功。
关于winxp及其它细节,参考http://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html#PasswordAccessFiles,和How to a Secure Password File on Microsoft Windows Systems。
Linux下的步骤与windows相似:
1、设置createConnector=false
2、确认jmx.access和jmx.password两个文件和内容
3、关于jmx.password文件的权限,Linux下就比较容易,执行如下命令便可
chmod 600 jmxremote.password
4、修改bin\activemq文件,将如下4行注释放开。注意,这里不是SUNJMX,不与windows同样。
# 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"
如今,Linux平台下也能够实现有密码保护的远程访问了。
关于JMX远程访问的配置已所有讲解完毕,总结一下咱们主要进行的配置:
不须要密码时,只修改activemq.xml中的配置便可;
须要密码时,关掉默认连接,在脚本中修改JVM参数,引向密码文件。难点在于密码文件的权限修改。