ActiveMQ的特性之一是很好的支持JMX。通過JMX MBeans可以很方便的監聽和控制ActiveMQ的broker。
鑒於官方網站提供的JMX特性說明對於遠程訪問的配置流程不是很完整,筆者在實際配置時也走了一點彎路。所以本文將根據筆者的實際經驗,分別講解如何在windows和Linux環境下配置ActiveMQ的JMX遠程訪問。除此之外,還會從“是否是密碼保護”的方面講解。
本文的JMX客戶端環境為Windows7下的JDK1.7。
沒有密碼保護的遠程訪問的配置很簡單,只需稍微修改activemq.xml中的配置即可。配置如下:
在<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後的上述信息,無需用戶名和口令。即可鏈接成功。如圖:
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參數,主要步驟如下:
一、確認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下的步驟與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參數,引向密碼文件。難點在於密碼文件的權限修改。
推薦閱讀:
Linux系統下ActiveMQ 安裝 http://www.linuxidc.com/Linux/2012-03/55623.htm
Ubuntu下的ACTIVEMQ服務器 http://www.linuxidc.com/Linux/2008-07/14587.htm
Spring+JMS+ActiveMQ+Tomcat實現消息服務 http://www.linuxidc.com/Linux/2011-10/44632.htm
Linux環境下面ActiveMQ端口號設置和WEB端口號設置 http://www.linuxidc.com/Linux/2012-01/51100.htm
ActiveMQ5.11.1和JDK版本的匹配關系 http://www.linuxidc.com/Linux/2015-05/118124.htm