首頁 > 軟體

ActiveMQ5.10.2版本設定JMX

2020-06-16 17:59:23

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引數,引向密碼檔案。難點在於密碼檔案的許可權修改。 

推薦閱讀:

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

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-06/118414.htm


IT145.com E-mail:sddin#qq.com