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參數,引向密碼文件。難點在於密碼文件的權限修改。