我的理解--關(guān)于jmx
http://bhsc-happy.iteye.com/blog/678163http://www.cnblogs.com/Javame/p/3881187.html
JMX
Java Management Extensions,Java管理擴(kuò)展,初步看了些資料,以為是專(zhuān)門(mén)管理,監(jiān)控jvm的一些信息的,特別是visual VM這個(gè)監(jiān)控jvm的東西,還有一個(gè)添加JMX連接的時(shí)候(我自己想錯(cuò)了,那樣的話應(yīng)該叫jvm Management Extensions),其實(shí)他能使得基于java語(yǔ)言開(kāi)發(fā)的程序能被管理,并且是可擴(kuò)展的。
Jdk以前是通過(guò)JVMPI之類(lèi)來(lái)監(jiān)測(cè)Java程序運(yùn)行中的jvm和系統(tǒng)的一系列情況,現(xiàn)在通過(guò)jmx就可以做到,這是通過(guò)java.lang.management 包來(lái)實(shí)現(xiàn)的,這個(gè)包是 JMX 在 JDK方面 的一個(gè)應(yīng)用,并不是表示jmx就是一個(gè)監(jiān)控jvm的東西。
我們可以用jmx來(lái)監(jiān)控我們的系統(tǒng),通過(guò)公布API的方式,但是,這里采用監(jiān)控這個(gè)詞,也是受了前面的例子的影響,實(shí)際上,個(gè)人覺(jué)得,就可以用jmx來(lái)開(kāi)發(fā)我們的系統(tǒng)。
現(xiàn)在的jboss,hibernate,tomcat各種應(yīng)用都號(hào)稱(chēng)實(shí)現(xiàn)了JMX規(guī)范,將可管理,可調(diào)用的MBean注冊(cè)到MBeanServer中,通過(guò)一種類(lèi)似“web服務(wù)”的方式公布出去,并且伴有一個(gè)名字,可以通過(guò)該名字找到該MBean。并且,這里的MBean是可以被管理的,說(shuō)到這里又想到了OSGI。
JMX與Web Service
個(gè)人認(rèn)為,我們實(shí)現(xiàn)JMX規(guī)范,將東西發(fā)布出去,和通過(guò)web Service的方式是很類(lèi)似的,也是可以遠(yuǎn)程調(diào)用的,只是相對(duì)的web Service的方式更加SOA一些,不過(guò)JMX號(hào)稱(chēng)也要提供對(duì)非java客戶(hù)端的支持,也就是跨語(yǔ)言了吧。。。
現(xiàn)在的JMX連接方式:
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server"); JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
看了下源碼,貌似還是通過(guò)RMI來(lái)實(shí)現(xiàn)的,不知道它要怎么實(shí)現(xiàn)非java客戶(hù)端支持。
從這里,我覺(jué)得JMX可以實(shí)現(xiàn)的,我們也都可以通過(guò)web Service實(shí)現(xiàn),只是看在它有個(gè)“M”上,以后如果有什么系統(tǒng)管理,監(jiān)控方面的,可以考慮使用它,也許開(kāi)發(fā),個(gè)人覺(jué)得還是使用web service好一些。
說(shuō)到這里,感覺(jué)OSGI與JMX也好像,在看到JMX能夠?qū)Bean進(jìn)行管理的時(shí)候,我就覺(jué)得跟OSGI很像,OSGI管理的是Bundle,找了找資源,原來(lái)早就有人考慮過(guò)了:
http://teamojiao.iteye.com/blog/438334
順便,在查資料的時(shí)候,發(fā)現(xiàn)一個(gè)東西,
if your question means, how to manage an OSGi runtime with JMX, you should have a look at MAEXO (http://code.google.com/p/maexo/). With MAEXO bundles up and running you will transparently get MBeans for a fair amount of services of the OSGi runtime as well as MBeans for your own services and bundles. Just have a look at the screencast.
摘一些話:僅做參考
<網(wǎng)友回復(fù)>
一個(gè)大系統(tǒng)中,各內(nèi)部模塊系統(tǒng)之間的基于接口方式的互相調(diào)用和治理,使用jmx是最佳方案.
帶來(lái)的好處是
1.面向接口,遠(yuǎn)程調(diào)用對(duì)于開(kāi)發(fā)人員是透明的,模塊在調(diào)用jmx接口時(shí),與調(diào)用本地方法幾乎相同.
2.可視化的治理界面, 通過(guò) Jconsole等jmx客戶(hù)端,可以實(shí)時(shí)監(jiān)控系統(tǒng),并且可實(shí)時(shí)調(diào)用方法進(jìn)行某些操作.
典型應(yīng)用場(chǎng)景:
某聊天系統(tǒng),一臺(tái)服務(wù)器作為 在線用戶(hù)列表服務(wù)器 A1, n臺(tái)服務(wù)器為用戶(hù)提供聊天業(yè)務(wù)處理 N1 ,N2,N3...,
一臺(tái)服務(wù)器作為后臺(tái)治理系統(tǒng)A2.
系統(tǒng)治理員現(xiàn)在進(jìn)行下面這樣一個(gè)操作,察看某用戶(hù)是否在線,找到該用戶(hù),發(fā)現(xiàn)其在線,則將該用戶(hù)加入黑名單,并踢下線.
對(duì)應(yīng)的jmx接口可以由以下幾個(gè):
A1為A2提供查詢(xún)?cè)诰€用戶(hù)jmx接口,加入黑名單接口,kickout接口,
A1為N1..等服務(wù)器提供以下接口: 注冊(cè)業(yè)務(wù)服務(wù)器,添加在線用戶(hù).查找黑名單用戶(hù)
N1...到N3為A1提供kickout接口.
因此在上面的踢下線操作,則由用戶(hù)在A2的web界面發(fā)出,交由A1執(zhí)行,A1記錄黑名單之后,再找到用戶(hù)所在業(yè)務(wù)服務(wù)器調(diào)用N1提供的接口讓用戶(hù)下線.
以上情形是在生產(chǎn)環(huán)境下的部署,而在開(kāi)發(fā)工作,則可以將A1,A2,N...N3等功能合并在一個(gè)應(yīng)用中調(diào)試. 由于使用的是jmx接口,在本地調(diào)試合并之后,可以直接調(diào)用應(yīng)用內(nèi)部接口方法.
這樣借助jmx實(shí)現(xiàn)的應(yīng)用模塊的靈活組裝與拆分,使得系統(tǒng)的可以根據(jù)負(fù)載需要,根據(jù)性能情況,靈活的拆分和整合部署分布式的應(yīng)用.
替代方案,選擇webservice,xmlrpc等,但是這些都需要手工編寫(xiě)或用工具生成大量的代碼來(lái)輔助完成接口間的java對(duì)象序列化 。
經(jīng)典jmx案例:
1.Jboss.使用jmx治理內(nèi)部的各個(gè)service。
2. 基于java的開(kāi)源網(wǎng)管軟件 Hyperic HQ ,通過(guò)jmx與各被治理資源進(jìn)行通訊和信息采集.
<網(wǎng)友回復(fù)>JMX是一個(gè)治理的框架。
當(dāng)我們想使用JMX的時(shí)候,就要問(wèn),我們的系統(tǒng)當(dāng)中有需要監(jiān)控治理的資源或者對(duì)象嗎?實(shí)事求是一點(diǎn),我們不能為了想使用一個(gè)高端的技術(shù),就歪曲系統(tǒng)的本來(lái)面目。
假如第一個(gè)問(wèn)題是肯定的,接下來(lái)就是看這些資源是否有生命周期。
經(jīng)典案例:jboss就是將所有可部署的組件作為資源來(lái)治理,這些組建都有其生命周期。這個(gè)理念甚至延伸到了其系統(tǒng)內(nèi)部,將其內(nèi)部的服務(wù)作為組件納入到 JMX中來(lái),成就了jboss基于jmx的微內(nèi)核系統(tǒng)。
posted on 2016-06-20 09:40 youngturk 閱讀(160) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): 筆試題