一個大系統中,各內部模塊系統之間的基於接口方式的互相調用和管理,使用jmx是最佳方案.
帶來的好處是
1.面向接口,遠程調用對於開發人員是透明的,模塊在調用jmx接口時,與調用本地方法幾乎相同.
2.可視化的管理界面,經過Jconsole等jmx客戶端,能夠實時監控系統,而且可實時調用方法進行某些操做.
典型應用場景:
某聊天系統,一臺服務器做爲 在線用戶列表服務器 A1,n臺服務器爲用戶提供聊天業務處理 N1 ,N2,N3...,
一臺服務器做爲後臺管理系統A2.
系統管理員如今進行下面這樣一個操做,察看某用戶是否在線,找到該用戶,發現其在線,則將該用戶加入黑名單,並踢下線.
對應的jmx接口能夠由如下幾個:
A1爲A2提供查詢在線用戶jmx接口,加入黑名單接口,kickout接口,
A1爲N1..等服務器提供如下接口: 註冊業務服務器,添加在線用戶.查找黑名單用戶
N1...到N3爲A1提供kickout接口.
所以在上面的踢下線操做,則由用戶在A2的web界面發出,交由A1執行,A1記錄黑名單以後,再找到用戶所在業務服務器調用N1提供的接口讓用戶下線.
以上情形是在生產環境下的部署,而在開發工做,則能夠將A1,A2,N...N3等功能合併在一個應用中調試. 因爲使用的是jmx接口,在本地調試合併以後,能夠直接調用應用內部接口方法.
這樣藉助jmx實現的應用模塊的靈活組裝與拆分,使得系統的能夠根據負載須要,根據性能狀況,靈活的拆分和整合部署分佈式的應用.
替代方案,選擇webservice,xmlrpc等,可是這些都須要手工編寫或用工具生成大量的代碼來輔助完成接口間的java對象序列化 。
經典jmx案例:
1.
Jboss
使用jmx管理內部的各個service。
2. 基於java的開源網管軟件Hyperic HQ ,經過jmx與各被管理資源進行通信和信息採集java
JMX是一個管理的框架。
當咱們想使用JMX的時候,就要問,咱們的系統當中有須要監控管理的資源或者對象嗎?實事求是一點,咱們不能爲了想使用一個高端的技術,就歪曲系統的原本面目。
若是第一個問題是確定的,接下來就是看這些資源是否有生命週期。
經典案例:jboss就是將全部可部署的組件做爲資源來管理,這些組建都有其生命週期。這個理念甚至延伸到了其系統內部,將其內部的服務做爲組件歸入到JMX中來,成就了jboss基於jmx的微內核系統。 web