ActiveMQ的特性之一是很好的支持JMX。通过JMX MBeans可以很方便的监听和控制ActiveMQ的broker。

  鉴于官方网站提供的JMX特性说明对于远程访问的配置流程不是很完整,笔者在实际配置时也走了一点弯路。所以本文将根据笔者的实际经验,分别讲解如何在windows和Linux环境下配置ActiveMQ的JMX远程访问。除此之外,还会从“是否是密码保护”的方面讲解。

  本文的JMX客户端环境为Windows7下的JDK1.7。

没有密码保护的远程访问

  没有密码保护的远程访问的配置很简单,只需稍微修改activemq.xml中的配置即可。配置如下:

Window平台下

  在<broker>节点中加入useJmx属性,并修改<managementContext>节点中的createConnector属性:

<broker ... useJmx="true">
...
<managementContext>
<managementContext createConnector="true"/>
</managementContext>
</broker>

  其中,默认访问端口为1099,也可以通过<managementContext>节点中的connectorPort属性修改。启动activemq后,日志中出现以下信息表示配置成功了。

 INFO | JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi

  在windows7命令行中启动jconsole,选择“远程进程”,在URL中输入将localhost替换成实际IP后的上述信息,无需用户名和口令。即可链接成功。如图:

Linux平台下

  Lunix平台的下配置与windows如出一辙,但需额外增加如下配置:

<broker ... useJmx="true">
...
<managementContext>
<managementContext createConnector="true" connectorHost="本机的IP"/>
</managementContext>
</broker>

或修改Linux服务器系统文件/etc/hosts中的localhost设置,将127.0.0.1更改为实际IP(不建议)。

  否则客户端无法通过将localhost替换成实际IP后远程访问JMX。

有密码保护的远程访问

  有密码保护的配置相对较复杂,需要修改JVM参数,主要步骤如下:

Window平台下

  一、确认ActiveMQ默认的连接器已经关闭。注意createConnector=false

<broker ... useJmx="true">
...
<managementContext>
<managementContext createConnector="false"/>
</managementContext>
</broker>

  二、确认conf目录下有jmx.access(用户权限)和jmx.password(用户密码)两个文件(安装时默认会有),并按照格式填写内容(参考官方文档)

  三、修改jmx.password的读取权限,目的是除归属用户外,其它用户不能有权限读写,这个是难点,对于笔者使用的win7系统,按如下方式修改。

    右键jmx.password文件>属性>安全>高级>权限,将“包括可从该对象的父项继承的权限”勾掉,弹出警告选择“添加”

    

    然后删除所有用户,一路确定。此时这个文件已经不能访问和修改。若想重新修改内容,右键jmx.password文件>属性>安全>高级>权限>添加,将用户添加进来即可。

  四、修改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平台下

  Linux下的步骤与windows类似:

  一、设置createConnector=false

  二、确认jmx.access和jmx.password两个文件和内容

  三、关于jmx.password文件的权限,Linux下就比较容易,执行以下命令即可

chmod 600 jmxremote.password

  四、修改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参数,引向密码文件。难点在于密码文件的权限修改。

最新文章

  1. python3使用pyinstaller打包apscheduler出的错
  2. CSharpGL(0)一个易学易用的C#版OpenGL
  3. iOS 学习 - 12.NSMutableAttributedString 计算高度
  4. 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox
  5. 【Evaluate Reverse Polish Notation】cpp
  6. MapReduce运行时出现java.lang.NoClassDefFoundError
  7. poj 2240 Arbitrage (最短路 bellman_ford)
  8. A tutorial that will show you how to build an instant messaging app with Sinch.
  9. 怎么使用CURL传输工具发送get或者post指令
  10. 微信小程序 PHP后端form表单提交实例详解
  11. Linux中rpm命令用法听语音
  12. Kali Linux下安装Nessus扫描器
  13. The Chain Of Responsibility (1)
  14. EBS预置文件作用收集整理
  15. 基于Reactjs实现webapp(加精)
  16. Nginx执行阶段
  17. CF1013B And
  18. Project Euler 345: Matrix Sum
  19. Eclipse + ndk+ cocos2dx 调试Cocos2dx 程序
  20. 数据库相关--mysql中的单表查询

热门文章

  1. CentOS 5 全功能WWW服务器搭建全教程 V3.0
  2. javaEE开发之文件下载
  3. linux 配置apache、mysql、php ——20150807
  4. 服务端渲染 SSR
  5. C++中string.find()函数与string::npos
  6. 导入解析excel小结
  7. jetty.xml解析
  8. HTML5事件-自定义右键菜单
  9. /u200B 8203 Zero-width space 问题
  10. 8.1.2 绑定Activity和Service