Spring 2.x jmx 及應(yīng)用(1)Annotation
現(xiàn)在大部分企業(yè)的應(yīng)用程序都需要application提供監(jiān)視程序運行的健康狀況和硬件狀況的功能。
舉個例子,前段時間做的一個項目,需要在一臺機器上監(jiān)視幾十臺client的操作,CPU使用率,內(nèi)存,硬盤等信息,當(dāng)CPU,內(nèi)存使用率過高時,發(fā)出通知到該client.甚至操作client的執(zhí)行動作,都可用jmx做到。
今天將從簡單入手結(jié)合jdk的Annotation來實踐Spring對jmx的支持

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

以前jmx的應(yīng)用需要編寫很長的代碼來實現(xiàn),現(xiàn)在你只需完成以上配置就可以實現(xiàn)一個簡單的jmx server的程序,jmx server的實現(xiàn)有很多,通常情況下,jmx會需要一個容器例如jboss,現(xiàn)在的方法是將程序本身作為server,這個方式最經(jīng)典的例子就是個大apserver,我的第一次jmx體驗就是在看jboss源碼時發(fā)起的。實現(xiàn)方式不同會用到不同的協(xié)議,這里我們需要jmxremote.jar,你可在spring的lib中找到。
現(xiàn)在來看下我們的mbean

2

3

4

5

6

7

8

9

10



11

12

13

14



15



16

17

18

19

20



21


22

23

24



25

26

27

28

29



30

31

32

33

34



35

36

37

38

我們可以到類中定義了幾個方法,monitor server可以通過clientStatus了解到client的狀態(tài),publicMessage是用來主動的發(fā)送消息到monitor server,所有不需要想外界暴露。monitor server可以通過
獲得信息中的ObjectName和Ip來連接到client操作mbean.
mbean在jdk的標(biāo)準實現(xiàn)是需要實現(xiàn)一個以MBean結(jié)尾的interface的,其中定義向外界暴露的方法和屬性
現(xiàn)在之需要在類前定義@ManagedResource,在屬性方法前分別用@ManagedOperation或者@ManagedAttribute修飾就可以了,Annotation實在是太方便了。未來將會有更多的應(yīng)用。
該測試了

2



3

4

5



6



7

8



9

10

11

12

13

現(xiàn)在我們只需要讓Spring加載上面那段bean的定義就好了。jmx mbean server的啟動是不會阻塞主線程的,所以需要保持主線程活著,不然加載完main方法就結(jié)束了,mbean server也掛了。
jdk里有個強大的monitor server那就是jconsole,不過一次只有一個連接
大家可以用jconsole來連接到mbean,調(diào)用方法或?qū)傩圆炜唇Y(jié)果。
spring jmx很有多有用的功能本人正在挖掘,過段時間再放出一些心得,歡迎有興趣的一起討論。