你聽說過JMX嗎?

立體的萌 | 作者
Java技術迷 | 出品
前言
JMX的全稱叫做Java Management Extension,中文名叫做java管理擴展,他是一個給應用程序、設備等做植入管理功能的框架,JMX主要是解決分布式系統(tǒng)管理的問題的;
他的主要的優(yōu)點有:可以非常容易得管理應用程序,得益于高度伸縮性的架構服務可以很容易的部署或者是取消。更重要的是提供了很多接口(java中我最喜歡的類就是接口了)可擴展性強 ;
JMX大體長這樣

JMX每個層都是干嘛的?
1.設備層
管理構件
設備層主要的作用是定義了信息模型、通知機制、一些輔助元數(shù)據類以及如何實現(xiàn)JMX管理資源的規(guī)范,在JMX中,管理對象都是以管理構件(MBean)的形式存在的,JMX的管理資源可以是一個java應用或者是以個服務也可以是一個設備,只要是用java開發(fā)的或者是用java進行包裝并且能置入JMX框架中的都叫JMX管理資源,并成為JMX的一個個管理構件(MBean),管理的時候需要先向MBean服務器注冊;
管理構件其實就是管理java資源并遵從一定的設計模式的接口,一個管理構件的管理接口:能被接觸的屬性值、能夠執(zhí)行的操作、發(fā)出的通知事件和管理構件的構建器;
JMX框架定義了四種管理構件:
第一種:標準管理構件
這是最簡單的一種,這種構件的實現(xiàn)是通過一組定義了屬性和操作的命名規(guī)則(也就是設計模式)來完成的,檢查標準管理構件的接口和應用設計模式的過程叫做內省;
JMX代理就是通過內省來查看每一個注冊在MBean服務器上的管理構件的函數(shù)和父類(查看他們是否遵從一定的設計模式)來決定他們能否代表一個管理部件,如果可以的話,就辨認出他們的屬性和操作;
第二種:動態(tài)管理構件
這種構件有著更好的靈活性,他的管理接口是可以在運行時開放的,他通過來實現(xiàn)DynamicMBean接口來干活;JMX代理通過getMBeaniInfo()函數(shù)來獲取當前的動態(tài)管理構件的管理接口,getMBeaniInfo()函數(shù)返回的對象是包含了屬性和操作的簽名的MBeanInfol類的實例;
之所以動態(tài)管理構件可以在運行期獲取,就是因為getMBeaniInfo()函數(shù)的調用是發(fā)生在動態(tài)管理構件向MBean服務器注冊之后,與標準管理構建不同的是:JMX代理不需要通過內省這種方式來確定動態(tài)管理構件的管理接口;
第三種:開放管理構件
嚴格來說,這也是動態(tài)管理構件,這是一種專門化的動態(tài)管理構件,就如同 接口也是抽象類,而且是一種更加抽象的抽象類,所有的有關開放管理構件相關的參數(shù)、返回值類型和屬性都圍繞著一組預定義的數(shù)據類型來建立;
預定義的數(shù)據類型就是我們常見的那些數(shù)據類型,比如:String、Integer、Float等,同時通過一組特定的接口來進行自我描述,JMX代理通過獲得一個OpenMBeanInfo對象(OpenMBeanInfo是MBeanInfo的子類)來獲取開放管理構件的管理接口;
第四種:模型管理構件
與開放管理構件一樣,他也是一種動態(tài)管理構件,而且也是一種專門化的動態(tài)管理構件,它是一種預制的、通用的并且還是動態(tài)的MBean類,他包含了所有必要的默認行為的實現(xiàn),還能允許在運行時添加或者是覆蓋需要定制的實現(xiàn);
JMX規(guī)定模型管理構件必須通過實例化javax.management.modelmbean.RequiredModelMBean類來實現(xiàn),還要配置該構件的默認行為并注冊到JMX代理中,JMX代理通過獲取一個ModelMBeanInfo對象來獲取管理接口;
模型管理構件在我看來是最先進的一種管理構件,他的主要的優(yōu)點有:
持久性,它是有持久機制的,用的就是java序列化技術甚至是JDBC來存儲模型MBean的狀態(tài);
通知和日志功能,模型管理構件可以記錄每個發(fā)出的通知,還自動發(fā)出屬性變化通知;
屬性值緩存;
通知模型
JMX還定義了通知模型,接口只是提供了一部分功能,管理應用程序還需要對狀態(tài)變化或者是特殊情況的發(fā)生做出反應和處理,JMX通知模型的主要工作就是完成同一個JMX代理中的管理構件之間的事件傳播;
JMX的通知模型主要有以下幾部分:1.Nitification接口。
一個通用的事件模型,用來標識事件的類型,可以被直接使用,也可以根據傳遞的事件的需要而被擴展;
主要用于接收通知的對象;
主要作用于需要通知過濾器的對象,為監(jiān)聽者提供過濾通知的過濾器;
這是由通知發(fā)送者實現(xiàn)的接口,允許希望得到通知的監(jiān)聽者注冊;
輔助元數(shù)據類
JMX框架還定義了輔助元數(shù)據類,它是用來描述管理構件的,他不僅可以用來內省標準管理構件,還能被動態(tài)管理構件用來進行自我描述,輔助元數(shù)據類通過屬性、操作、構建器和通告來描述管理構件,JMX代理就是通過輔助元數(shù)據類來管理所有的管理部件,不過管理部件具體是什么類型JMX代理就不管了;
輔助元數(shù)據類主要有以下幾種:

2.代理層
代理層是運行在java虛擬機上的管理實體,是管理資源和管理者之間的橋梁,代理層是直接管理資源的,他管理的資源庫可以被遠程的管理程序所控制,代理層的主要構成是一個MBean服務器和一系列處理被管理資源的服務; 
MBean服務器
MBean服務器是代理層是核心,這里注冊著設備層的所有的管理構件,注冊個管理部件的時候必須提供唯一的一個對象名,管理應用程序就是用這個對象名來進行標識管理部件并對其操作,具體的操作有: 1.發(fā)現(xiàn)管理構件的管理接口;
2.讀寫屬性值;
3.執(zhí)行管理構件中定義的操作;
4.獲取管理構件中發(fā)出的通告
5.基于對象名和屬性名來查詢管理構件;
協(xié)議適配器和連接件
MBean服務器就是依賴他倆來運行與該代理的java虛擬機之外的管理應用程序來進行通信,協(xié)議適配器通過特定的協(xié)議提供了一張注冊在MBean服務器的管理構件的視圖;
連接器提供管理應用一方的接口以使得代理和管理應用程序進行通信,也就是說中針對不同的通信連接器提供的是一樣的遠程接口來封裝通信過程,當遠程應用程序使用這個接口的時候就可以通過網絡透明的和代理進行交互,與協(xié)議就沒什么關系了;
適配器和連接器主要有這些:
1.RMI連接器
2.SNMP協(xié)議適配器
3.IIOP協(xié)議適配器
4.HTML協(xié)議適配器
5.HTTP連接器
代理服務
代理服務可以對注冊的管理構件執(zhí)行管理功能(智能管理),代理服務本身也是作為管理構件而存在,也可以被MBean服務器控制;
JMX定義的代理服務主要有以下幾種:
通過管理小程序服務可以獲得并實例化新的類,還可以使網絡上的類庫本地化,他是通過management-applet服務來實現(xiàn)的;
用來定期監(jiān)視管理構件的屬性值,一旦超出范圍就會發(fā)出特定的通告,JMX規(guī)定了三種監(jiān)視器:計數(shù)器、度量和字符串;每一個監(jiān)視服務都是作為一個標準管理構件存在的,需要提供服務的時候就可以由相應的管理構件或者是遠程管理應用程序動態(tài)創(chuàng)建或配置注冊使用;
可以周期性的發(fā)出通告或者是在制定日期和時間的時候發(fā)出通告,他也是一個管理構件,主要作用就是幫助管理應用程序建立一個可配置的備忘錄;
JMX規(guī)范 中也定義了管理構件之間的關系模型,一個關系是用戶定義的管理構件之間的N維關系,關系模型中包括:角色、角色信息,管理類型,關系,角色值,關系服務等;
注意,只有注冊哦MBean服務器上并且能被對象名標識的管理構件才能成為一個關系的成員,關系服務還能鎖定不合理關系類型的創(chuàng)建;
3.分布服務層
分布管理層規(guī)定了實現(xiàn)JMX 應用管理平臺的接口,它定義了對能對代理層進行操作的管理接口和組件;
他的主要功能如下:
有良好的安全性,通過管理應用層和另一個管理代理的設備層的聯(lián)合就可以提供一個完整的網絡管理的解決方案;
總結
這就是JMX,他就像是javaweb世界里的一名無名小卒,默默付出,他的知名度沒有那么高,但是并不代表它的用途不廣泛,SUN公司在此基礎上開發(fā)了用于網絡管理的JDMK,還有BEA的weblogic應用服務器把JMX作為自己的管理基礎,JBoss實現(xiàn)的J2EE應用服務器也是以JMX為內核的;
為管理應用程序提供一個接口,這個接口就好比是個連接器能夠透明的與代理層或者是JMX管理資源進行交互;
通過各種協(xié)議的映射提供了一個JMX代理和所有可管理組件的視圖;
分布管理信息,把高層的管理平臺的管理信息向下面眾多的JMX代理發(fā)布;
收集多個JMX代理端的管理信息,并根據管理終端用戶的需要篩選其感興趣的內容并整理成邏輯視圖的形式發(fā)給終端用戶;
關系服務 時間服務 監(jiān)視服務 動態(tài)類裝載。 NotificationBroadcaster接口。 NotificationFilter接口。 NotificationListener接口。
本文作者:立體的萌 為Java技術迷專欄作者 投稿,未經允許請勿轉載。
往 期 推 薦 1、真香!用IDEA神器看源碼,效率真高! 2、什么?Spring Boot CommandLineRunner 有坑?。?/span> 3、頂級分布式開源項目,配上這款可視化工具,真香! 4、都知道Tomcat是個Servlet容器,可是Servlet又是怎么回事? 5、這年頭,還有不會OOM排查神器mat的程序員么? 6、Java程序員必會的工具庫,讓你的代碼量減少90% 7、重裝IDEA再也不愁了,一招搞定同步個人配置了! 點分享
點收藏
點點贊
點在看





