日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问

發布時間:2023/12/3 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

與以前的版本相比,JBoss AS7的目標之一是使其在默認情況下更加安全。 受此目標直接影響的領域之一是,您不再期望服務器在端口上公開某些服務,而無需任何身份驗證/授權就可以訪問它。 請記住,在以前的JBoss AS版本中,只要打開了這些端口以進行遠程通信,就可以訪問JNDI端口,JMX端口而無需任何身份驗證/授權。 在JBoss AS7中,此類端口上用于通信的更細粒度的授權允許服務器控制誰可以通過該端口調用操作。

當然,這不僅限于JBoss AS7,而且仍然是WildFly(這是JBoss Application Server的重命名)的目標。 實際上,WildFly向前邁了一步,現在具有“一個單一端口”的功能,可以進行所有通信。

JBoss AS7和WildFly中的JMX通信

在此背景下,我們現在將重點介紹JBoss AS7和WildFly中的JMX通信。 在本文的其余部分中,我將使用WildFly(8.2.0 Final)作為參考,但是相同的細節(略有變化)適用于JBoss AS7和WildFly的其他主要版本,這些版本到目前為止已經發布。

WildFly服務器由“子系統”組成,每個子系統都具有一組特定的功能。 例如,有支持Java EE功能集的EE子系統。 然后是支持Web / HTTP服務器功能的Undertow子系統。 同樣,有一個JMX子系統公開了服務器上的JMX功能集。 眾所周知,我敢肯定,JMX服務通常用于監視甚至管理Java服務器,其中包括遠程管理服務器。 WildFly中的JMX子系統允許遠程訪問JMX服務,并且端口9990是用于該遠程JMX通信的端口。

JConsole用于針對JBoss AS7和WildFly進行遠程JMX訪問

Java(JDK)與JConsole工具捆綁在一起,該工具允許連接到公開JMX服務的本地或遠程Java運行時。 該工具易于使用,您所要做的就是運行jconsole命令,它將顯示一個圖形菜單,列出所有本地Java進程,以及一個用于指定遠程URL以連接到遠程進程的選項:

# Start the JConsole $JAVA_HOME/bin/jconsole

假設您已經在本地啟動了WildFly獨立服務器。 現在,當您啟動jconsole時,您會注意到WildFly Java進程在您可以連接到的本地運行進程中列出。 選擇WildFly Java實例時,將自動連接到該實例,并且您會注意到服務器公開的MBean。 但是,在本文的上下文中,JConsole中的這種“本地過程”模式不是我們感興趣的。

讓我們使用該JConsole菜單中的“ Remote process”選項,該菜單允許您指定用于連接到Java運行時的遠程URL以及用于連接到該實例的用戶名和密碼。 即使我們的WildFly服務器在本地運行,我們也可以使用此“遠程進程”選項嘗試并連接到它。 因此,讓我們嘗試一下。 在此之前,讓我們考慮以下幾點:

  • 請記住,WildFly中的JMX子系統允許在端口9990上進行遠程訪問
  • 對于遠程訪問JMX,URL的格式為– service:jmx:[vendor-specific-protocol]:// [host]:[port]。 供應商特定的協議是這里有趣的地方。 對于WildFly,特定于供應商的協議是http-remoting-jmx。
  • 請記住,WildFly在默認情況下是安全的,這意味著僅因為JMX子系統公開了9990端口以進行遠程通信,并不意味著它已開放給任何人通信。 為了允許通過此端口進行通信,必須對調用方客戶端進行身份驗證和授權。 這由WildFly中的“ ManagementRealm”支持。 允許對此領域進行身份驗證和授權的用戶訪問該端口。
  • 牢記這些要點,讓我們首先在管理領域中創建一個用戶。 可以使用添加用戶命令行腳本(位于JBOSS_HOME / bin文件夾中)完成此操作。 由于有足夠的文檔資料,因此我將不做詳細介紹。 假設我創建了一個名為“ wflyadmin”的用戶,并在管理領域中使用了適當的密碼。 要驗證是否已正確創建用戶,請在正確的領域中訪問URL http:// localhost:9990 / console的WildFly管理控制臺。 系統將要求您輸入用戶名和密碼進行訪問。 使用與新創建的用戶相同的用戶名和密碼。 如果登錄有效,那么您很好。 如果沒有,那么請確保您在添加新用戶時做得正確(正如我說的,我將不贅述添加新用戶的細節,因為這只會不必要地延長本文的篇幅)。

    因此,在這一點上,我們已經創建了一個屬于ManagementRealm的名為“ wflyadmin”的用戶。 我們將使用相同的用戶帳戶通過JConsole訪問WildFly上的JMX服務。 現在讓我們照常啟動jconsole:

    $JAVA_HOME/bin/jconsole

    在JConsole菜單上,讓我們再次選擇“遠程過程”選項,并在URL文本框中使用以下URL:

    service:jmx:http-remoting-jmx://localhost:9990

    注意:對于JBoss AS 7.x和JBoss EAP 6.x ,供應商特定的協議是remoting-jmx,并且通信端口是9999 。 因此,URL為service:jmx:remoting-jmx:// localhost:9999

    在用戶名和密碼文本框中,使用與新創建的用戶/密碼相同的密碼。 最后,單擊“連接”。 你看到了什么? 這是行不通的! 連接失敗。 那么出了什么問題?

    為什么JConsole對WildFly的遠程訪問不起作用?

    您做了所有顯而易見的事情來遠程訪問WildFly JMX服務,但是您仍然看到JConsole無法連接到它。 可能是什么原因? 記住,在前面的幾點中,我注意到“特定于供應商的協議”很有趣嗎? 我們使用http-remoting-jmx,該協議內部依賴于某些WildFly / JBoss特定的庫,主要用于遠程通信以及身份驗證和授權。 這些庫是WildFly服務器專用的,因此不是標準Java運行時環境的一部分。 啟動jconsole時,它將使用標準類路徑,該類路徑僅包含JDK / JRE中的相關庫。

    要解決此問題,您需要做的是將WildFly服務器特定的庫引入JConsole的類路徑中。 在研究如何做之前,讓我們看一下需要哪些WildFly特定的庫。 工作所需的所有必要類均在JBOSS_HOME / bin / client /文件夾中的jboss-cli-client.jar中。 因此,我們需要做的所有事情就是將此jar包含在jconsole工具的類路徑中。 為此,我們使用jconsole工具的-J選項,該選項允許將參數傳遞給jconsole的Java運行時。 為此的命令是:

    $JAVA_HOME/bin/jconsole -J-Djava.class.path=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/jconsole.jar:/opt/wildfly-8.2.0.Final/bin/client/jboss-cli-client.jar

    (請注意,對于Windows,classpath分隔符是分號而不是冒號)


    注意,針對JBoss AS 7.x和JBoss EAP 6.x的服務器特定的jar名為jboss-client.jar,并且位于相同的JBOSS_HOME / bin / client目錄位置。

    因此,我們使用-J選項將-Djava.class.path作為參數傳遞給jconsole Java運行時。 注意,我們在該類路徑中指定的不僅僅是服務器特定的jar。 這是因為,使用-Djava.class.path應該包含完整的類路徑。 我們包括JConsole必需的Java JDK lib文件夾中的jar,以及該類路徑中服務器特定的jar。

    運行該命令應照常啟動JConsole,讓我們繼續并選擇“ Remote process”選項,并指定與以前相同的URL:

    service:jmx:http-remoting-jmx://localhost:9990

    并使用與以前相同的用戶名和密碼,然后單擊“連接”。 這次您應該能夠連接,并且應該開始看到通過JMX公開的MBean和其他服務。

    如何提供執行此必要的類路徑設置的腳本?

    由于嘗試使用JConsole對WildFly進行遠程訪問是很平常的事情,因此可以合理地期望擁有一個設置類路徑的腳本(如上所述),然后可以使用該腳本。 這就是為什么WildFly會提供這樣的腳本的原因。 它位于JBOSS_HOME / bin文件夾中,稱為jconsole.sh(對于Windows,稱為jconsole.bat)。 這只是一個包裝腳本,在適當設置了類路徑之后,該腳本內部調用Java JDK中存在的jconsole工具。 您所要做的就是運行:

    $JBOSS_HOME/bin/jconsole.sh

    在真正的遠程計算機上針對WildFly使用JConsole怎么辦?

    到目前為止,我們正在使用與WildFly實例在同一臺機器上的jconsole工具,這意味著我們可以訪問文件系統上WildFly安裝目錄中存在的WildFly服務器特定jar的文件系統。 這使我們能夠設置jconsole的類路徑以指向本地文件系統上的jar?

    如果要從一臺遠程計算機對另一臺計算機上安裝并運行的WildFly服務器運行jconsole,該怎么辦。 在這種情況下,您的遠程客戶端計算機將無法訪問WildFly安裝目錄的文件系統。 因此,要使jconsole在這種情況下運行,必須將JBOSS_HOME / bin / jboss-cli-client.jar復制到遠程客戶端計算機上,并復制到您選擇的目錄中,然后按照說明設置jconsole工具的類路徑并將其指向該jar位置。 這樣一來,您就可以從遠程計算機上的jconsole訪問WildFly的JMX服務。

    翻譯自: https://www.javacodegeeks.com/2014/12/my-wiki-remote-jmx-access-to-wildfly-or-jboss-as7-using-jconsole.html

    總結

    以上是生活随笔為你收集整理的我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。