java 组件化_(原创)搭建一个组件化的监控平台
最近看到一位同事正在開發(fā)一個(gè)監(jiān)控軟件,要求就是通過針對(duì)服務(wù)器現(xiàn)有的一些接口,通過這些接口返回的數(shù)據(jù)進(jìn)行分析,如果監(jiān)控的值到達(dá)預(yù)先設(shè)定的范圍則通過短信的方式發(fā)送給管理員。
從整個(gè)開發(fā)的功能上來看是一個(gè)比較單一也很明確的功能,所開發(fā)的系統(tǒng)對(duì)所其所監(jiān)控的軟件的依賴性也非常大,主要是監(jiān)控的數(shù)據(jù)分析行為和監(jiān)控信息的服務(wù)報(bào)警行為這塊。既然這兩塊很難做成一個(gè)通用的功能模塊,那就搭建一個(gè)監(jiān)控平臺(tái),可以讓這些功能模塊通過組件的方式自由的注冊(cè)和銷毀。
所有我構(gòu)思了這個(gè)監(jiān)控平臺(tái),它對(duì)外有三個(gè)接口,分別是監(jiān)控接口,報(bào)警接口和監(jiān)控消息監(jiān)控接口。由平臺(tái)統(tǒng)一管理這些組件的生命周期,每個(gè)組件都過單獨(dú)的線程運(yùn)行。提供一個(gè)核心組件CoreComponent調(diào)度所有監(jiān)控?cái)?shù)據(jù)的流轉(zhuǎn)。平臺(tái)本身還使用基于jmx管理服務(wù)技術(shù)提供對(duì)所有當(dāng)前使用的組件運(yùn)行情況的監(jiān)控,也包括動(dòng)態(tài)的啟動(dòng)和停止組件的運(yùn)行狀態(tài)。
下載地址
二進(jìn)制程序第三方類庫下載,第三方類庫下載2 放到lib目錄下。
api-docs
源代碼
下面是部分設(shè)計(jì)圖:
AlertComponent設(shè)計(jì)圖
SpyComponent設(shè)計(jì)圖:
MessageAlertChannelActiveAwareComponent設(shè)計(jì)圖
下面我利用該平臺(tái)開發(fā)一個(gè)監(jiān)控ActiveMQ狀態(tài)的組件ActiveMQJmxSpyComponent,該組件實(shí)現(xiàn)對(duì)AMQ運(yùn)行狀態(tài)的監(jiān)控(監(jiān)聽失敗或失敗后重新連接成功)??梢酝ㄟ^指定Queue名稱列表來指定要監(jiān)控Queue隊(duì)列的消費(fèi)者是否為0(通常表示對(duì)方可能因?yàn)榫W(wǎng)絡(luò)或服務(wù)中斷而失去監(jiān)控)或是隊(duì)列消息都由0變?yōu)榇笥?表示消費(fèi)者重新監(jiān)聽上服務(wù)。
1
publicclassActiveMQJmxSpyComponentextendsAbstractSpyComponent{2
/**?*//**3?????*?Logger?for?this?class4*/5privatestaticfinalLogger?LOGGER=Logger.getLogger(ActiveMQJmxSpyComponent.class);6//AMQ?jmx?serverUrl?to?spy7privateString?serverUrl;8//detect?interval(unit?is?ms)9privateintdetectInterval=5000;10//the?Queue?name?list?to?spy11privateSetdestinationNamesToWatch;12//if?queue's?consumer?suspends?after?then?certain?time?then?to?notify.?default?is?3?minutes13privateintqueueSuspendNotifyTime=3*60*1000;
下面是一個(gè)報(bào)警組件的實(shí)現(xiàn):只是簡單的把監(jiān)控消息打印在屏幕上PrintScreenAlertComponent
1
publicclassPrintScreenAlertComponentextendsAbstractAlertComponent{23
/**//*(non-Javadoc)4?????*?@see?org.xmatthew.spy2servers.core.Component#getName()5*/6
publicString?getName(){7return"PrintScreenAlertComponent";8????}910
/**//*(non-Javadoc)11?????*?@see?org.xmatthew.spy2servers.core.Component#startup()12*/13
publicvoidstartup(){14????????setStatusRun();1516????}1718
/**//*(non-Javadoc)19?????*?@see?org.xmatthew.spy2servers.core.Component#stop()20*/21
publicvoidstop(){22????????setStatusStop();2324????}2526????@Override27
protectedvoidonAlert(Message?message){28????????System.out.println(message);2930????}3132}33
下面該組件的注冊(cè)。${CUR_PATH}/conf/spy2servers.xml
1
<?xml ?version="1.0"?encoding="UTF-8"?>2????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4????xmlns:aop="http://www.springframework.org/schema/aop"5????xmlns:tx="http://www.springframework.org/schema/tx"6????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-2.0.xsd7???????????http://www.springframework.org/schema/aop?http://www.springframework.org/schema/aop/spring-aop-2.0.xsd8???????????http://www.springframework.org/schema/tx?http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">910111213141516171819Matthew.Queue20Rocket.Queue21222324252627
ok,現(xiàn)在ActiveMQJmxSpyComponent監(jiān)控到的消息能會(huì)被PrintScreenAlertComponent打印到屏幕上。
現(xiàn)在啟動(dòng)程序,我們看到ActiveMQJmxSpyComponent和PrintScreenAlertComponent組件已經(jīng)啟動(dòng)了。
使用Jconsole進(jìn)行監(jiān)控
如果此時(shí)需要建立一個(gè)消息報(bào)警的規(guī)則,只要實(shí)現(xiàn)以下接口,并注入到CoreComponent的alertRule屬性中即可。
1
publicinterfaceAlertRule{23booleanisAlertAllow(MessageAlertChannel?channel);4}
應(yīng)用這個(gè)平臺(tái)開發(fā)監(jiān)控的組件就這么簡單。
備注:因?yàn)殚_發(fā)時(shí)間比較緊,如果有什么Bug也希望大家反饋給我,我會(huì)改進(jìn)。
Yours Matthew!
posted on 2008-03-12 13:41 x.matthew 閱讀(1953) 評(píng)論(7) ?編輯 ?收藏
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的java 组件化_(原创)搭建一个组件化的监控平台的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 行转列分级输出_MySQL如
- 下一篇: 2021主流3a大作电脑配置?