• ActiveMQ5.10.2版本配置JMX


    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文件>属性>安全>高级>权限>添加,将用户添加进来即可。

      四、修改binactivemq.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

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

  • 相关阅读:
    poj1877
    poj2163
    API hook 单步调试
    用VC++编写勾子程序(转)
    不使用DLL创建全局系统钩子
    接触DLL编写并实现线程注入和全局钩子
    根据RGB计算亮度
    !!!光线对视频识别技术的影响
    消息钩子函数入门篇
    “蓝脑”计划:人造大脑的可能性 文化·探索 CCTV_com
  • 原文地址:https://www.cnblogs.com/hanmou/p/4552163.html
Copyright © 2020-2023  润新知