專利名稱:用于機(jī)群監(jiān)控系統(tǒng)控制臺(tái)的消息服務(wù)裝置及其方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)機(jī)群監(jiān)控,具體涉及實(shí)現(xiàn)機(jī)群監(jiān)控系統(tǒng)控制臺(tái)所使用的消息隊(duì)列服務(wù)的方法和裝置。
背景技術(shù):
機(jī)群系統(tǒng)是多臺(tái)獨(dú)立的節(jié)點(diǎn)計(jì)算機(jī)(通常是服務(wù)器)的聚集。這些節(jié)點(diǎn)計(jì)算機(jī)通過專用高速網(wǎng)絡(luò)和支撐性軟硬件聚合在一起,對(duì)外表現(xiàn)為一個(gè)單一的超級(jí)計(jì)算機(jī)。機(jī)群系統(tǒng)通常是一個(gè)復(fù)雜的系統(tǒng),管理人員在管理整個(gè)機(jī)群系統(tǒng)的時(shí)候需要掌握大量的管理數(shù)據(jù),并對(duì)這些數(shù)據(jù)作復(fù)雜的分析,同時(shí)還要對(duì)機(jī)群系統(tǒng)的某些構(gòu)件進(jìn)行管理操作。如果憑管理員手工完成這些工作是相當(dāng)困難的,機(jī)群監(jiān)控系統(tǒng)就是為機(jī)群管理員采集機(jī)群各種管理數(shù)據(jù),對(duì)這些數(shù)據(jù)作復(fù)雜分析,同時(shí)向機(jī)群某些構(gòu)件發(fā)送管理員的操作命令的系統(tǒng)。為了采集到所有管理數(shù)據(jù),監(jiān)控管理系統(tǒng)控制臺(tái)需要采集硬件數(shù)據(jù),還需要采集軟件數(shù)據(jù),并且,控制臺(tái)還要向節(jié)點(diǎn)發(fā)送管理操作命令。要實(shí)現(xiàn)監(jiān)控管理系統(tǒng)采集各種管理數(shù)據(jù)和向機(jī)群系統(tǒng)的某些節(jié)點(diǎn)發(fā)送管理命令,這就需要監(jiān)控系統(tǒng)控制臺(tái)不但要與所有節(jié)點(diǎn)硬件數(shù)據(jù)采集裝置通信,還要與所有軟件數(shù)據(jù)采集裝置通信,并且這些通信都是同時(shí)進(jìn)行的,所以,在監(jiān)控系統(tǒng)控制臺(tái)需要處理大量的通信消息,如何管理這些繁多的通信消息,是監(jiān)控系統(tǒng)控制臺(tái)面臨的一大難題。
發(fā)明內(nèi)容
為了解決上述問題,本發(fā)明提出了一種由監(jiān)控系統(tǒng)控制臺(tái)使用的用以管理所有通信消息的消息服務(wù)裝置以及一種管理通信消息的消息服務(wù)方法。所述的消息服務(wù)裝置不但結(jié)構(gòu)清晰,不易出錯(cuò),而且效率很高。
根據(jù)本發(fā)明的監(jiān)控系統(tǒng)控制臺(tái)所使用的消息服務(wù)裝置包括匯集卡裝置,用于采集機(jī)群系統(tǒng)中一個(gè)機(jī)柜里所有節(jié)點(diǎn)的硬件數(shù)據(jù);節(jié)點(diǎn)中間代理(NP)裝置,用于采集機(jī)群系統(tǒng)中一個(gè)機(jī)柜里的所有節(jié)點(diǎn)的軟件數(shù)據(jù);基本服務(wù)提供者裝置(BSP),用于通過串口和以太網(wǎng)分別與所有匯集卡和所有NP裝置通信,采集機(jī)群系統(tǒng)中所有節(jié)點(diǎn)的硬件數(shù)據(jù)和軟件數(shù)據(jù);其中,所述基本服務(wù)提供者裝置包括串口通信裝置,用于對(duì)串口進(jìn)行操作,從而向匯集卡裝置發(fā)送或從匯集卡裝置接收消息;以太網(wǎng)通信裝置,用于對(duì)以太網(wǎng)進(jìn)行操作,從而向NP裝置發(fā)送或從NP裝置接收消息;串口消息隊(duì)列存儲(chǔ)器,用于存儲(chǔ)所有需要向匯集卡發(fā)送的消息和所有從匯集卡接收的消息,作為串口消息隊(duì)列;以太網(wǎng)消息隊(duì)列存儲(chǔ)器,用于存儲(chǔ)所有需要向NP裝置發(fā)送的消息和所有從NP裝置接收的消息,作為以太網(wǎng)消息隊(duì)列;任務(wù)消息隊(duì)列存儲(chǔ)器,用于存儲(chǔ)所有需要發(fā)送到匯集卡或NP裝置的操作任務(wù),作為任務(wù)消息隊(duì)列;串口消息隊(duì)列操作裝置,用于直接對(duì)串口消息隊(duì)列操作和維護(hù)串口消息隊(duì)列,從而為與匯集卡通信的串口通信裝置提供消息服務(wù);以太網(wǎng)消息隊(duì)列操作裝置,用于直接對(duì)以太網(wǎng)消息隊(duì)列操作和維護(hù)以太網(wǎng)消息隊(duì)列,從而為與NP裝置通信的以太網(wǎng)通信裝置提供消息服務(wù);任務(wù)消息隊(duì)列操作裝置,用于直接對(duì)任務(wù)消息隊(duì)列操作和維護(hù)任務(wù)消息隊(duì)列,從而為與NP裝置和匯集卡通信的串口通信裝置和以太網(wǎng)通信裝置關(guān)于任務(wù)的通信部分提供消息服務(wù);任務(wù)處理裝置,用于對(duì)機(jī)群管理員通過控制臺(tái)發(fā)送的節(jié)點(diǎn)的管理任務(wù)進(jìn)行處理。
根據(jù)本發(fā)明的用于機(jī)群監(jiān)控系統(tǒng)控制臺(tái)的消息服務(wù)方法,用于基本服務(wù)提供者裝置經(jīng)串口和以太網(wǎng)分別與所有匯集卡和所有NP裝置通信,從而采集機(jī)群系統(tǒng)中所有節(jié)點(diǎn)的硬件數(shù)據(jù)和軟件數(shù)據(jù),所述的方法包括對(duì)串口消息隊(duì)列執(zhí)行操作從而通過串口通信裝置向匯集卡提供串口消息服務(wù)以及從匯集卡接收反饋消息的步驟;對(duì)以太網(wǎng)消息隊(duì)列執(zhí)行操作從而通過以太網(wǎng)通信裝置向NP裝置提供以太網(wǎng)消息服務(wù)并從以太網(wǎng)接收反饋消息的步驟;對(duì)任務(wù)消息隊(duì)列執(zhí)行操作從而向串口消息隊(duì)列和以太網(wǎng)消息隊(duì)列提供任務(wù)并提供任務(wù)執(zhí)行結(jié)果的步驟。
通過上述本發(fā)明提供的消息服務(wù)裝置和方法,可以提高監(jiān)控系統(tǒng)控制臺(tái)對(duì)所有通信消息進(jìn)行管理的效率,由此減輕了系統(tǒng)控制臺(tái)的繁重的管理任務(wù)。
此外,發(fā)明內(nèi)容還包括各消息隊(duì)列中用于三種消息隊(duì)列之間同步和協(xié)作的方法、機(jī)制和裝置包括會(huì)話號(hào)機(jī)制(session)與記錄時(shí)間記錄機(jī)制(timeval),以及輪次的機(jī)制(timeid),這些機(jī)制由以下具體實(shí)施例來說明。
本發(fā)明的上述目的及其特征將通過隨后參照附圖對(duì)優(yōu)選實(shí)施例所作的說明而變得更加明顯,其中圖1是本發(fā)明用于機(jī)群監(jiān)控系統(tǒng)控制臺(tái)的消息服務(wù)裝置的原理圖;圖2是通過本發(fā)明消息服務(wù)裝置的串口消息隊(duì)列操作裝置對(duì)串口消息隊(duì)列進(jìn)行操作的原理圖;圖3是串口處理流程圖;圖4是通過本發(fā)明消息服務(wù)裝置的以太網(wǎng)消息隊(duì)列操作裝置對(duì)以太網(wǎng)消息隊(duì)列進(jìn)行操作的原理圖;圖5是描述圖4中的向以太網(wǎng)發(fā)送消息的操作的流程圖;圖6是描述圖4中的從以太網(wǎng)接收消息的操作的流程圖;圖7是通過本發(fā)明消息服務(wù)裝置的任務(wù)消息隊(duì)列操作裝置對(duì)任務(wù)消息隊(duì)列進(jìn)行操作的原理圖。
具體實(shí)施例方式
如圖1所示,用于機(jī)群監(jiān)控系統(tǒng)控制臺(tái)的消息服務(wù)裝置包括 用于采集機(jī)群系統(tǒng)中一個(gè)機(jī)柜里所有節(jié)點(diǎn)的硬件數(shù)據(jù)的匯集卡裝置110;用于采集機(jī)群系統(tǒng)中一個(gè)機(jī)柜里的所有節(jié)點(diǎn)的軟件數(shù)據(jù)的節(jié)點(diǎn)中間代理(NP)裝置111;基本服務(wù)提供者裝置(BSP)120,用于通過串口和以太網(wǎng)分別與所有匯集卡和所有NP裝置通信,從而采集機(jī)群系統(tǒng)中所有節(jié)點(diǎn)的硬件數(shù)據(jù)和軟件數(shù)據(jù)。BSP120包括多個(gè)消息隊(duì)列存儲(chǔ)器用于存儲(chǔ)作為串口消息隊(duì)列的所有需要向匯集卡發(fā)送的消息和所有從匯集卡接收的消息的串口消息隊(duì)列存儲(chǔ)器103、用于存儲(chǔ)作為以太網(wǎng)消息隊(duì)列的所有需要向NP裝置發(fā)送的消息和所有從NP裝置接收的消息的以太網(wǎng)消息隊(duì)列存儲(chǔ)器109;用于存儲(chǔ)作為任務(wù)消息隊(duì)列的所有需要發(fā)送到匯集卡或NP裝置的操作任務(wù)的任務(wù)消息隊(duì)列存儲(chǔ)器106;用于處理串口消息隊(duì)列的串口消息隊(duì)列操作裝置102;用于處理以太網(wǎng)消息隊(duì)列的以太網(wǎng)消息隊(duì)列操作裝置108;用于處理任務(wù)消息隊(duì)列操作的任務(wù)消息隊(duì)列操作裝置105;串口通信裝置101,用于直接操作串口,以利用串口消息隊(duì)列操作裝置102提供的消息服務(wù),即串口通信裝置通過串口消息隊(duì)列操作裝置102從消息隊(duì)列存儲(chǔ)器103中獲取需要發(fā)送的消息,串口通信裝置101將接收到的消息通過串口消息隊(duì)列操作裝置102存儲(chǔ)在串口消息隊(duì)列存儲(chǔ)器103中;以太網(wǎng)通信裝置107,用于直接操作以太網(wǎng),以利用以太網(wǎng)消息隊(duì)列操作裝置108提供的消息服務(wù),即以太網(wǎng)通信裝置107通過以太網(wǎng)消息隊(duì)列操作裝置108從以太網(wǎng)消息隊(duì)列存儲(chǔ)器109中獲取需要發(fā)送的消息,以太網(wǎng)通信裝置107將接收到的消息存入太網(wǎng)消息隊(duì)列存儲(chǔ)器109中。任務(wù)處理裝置104,用于處理所有管理員的管理任務(wù),同時(shí)任務(wù)處理裝置104通過任務(wù)消息隊(duì)列操作裝置105將管理員的管理任務(wù)存入任務(wù)消息隊(duì)列存儲(chǔ)器106中,通過串口消息隊(duì)列操作裝置102將發(fā)送給匯集卡的任務(wù)插入串口消息隊(duì)列存儲(chǔ)器103的串口消息隊(duì)列中,通過以太網(wǎng)通信裝置107將發(fā)送給NP裝置的任務(wù)插入到以太網(wǎng)消息隊(duì)列存儲(chǔ)器109的以太網(wǎng)消息隊(duì)列中。
下面對(duì)圖1中的串口消息隊(duì)列存儲(chǔ)器103中的串口消息隊(duì)列、任務(wù)消息隊(duì)列存儲(chǔ)器106中的任務(wù)消息隊(duì)列以及以太網(wǎng)消息隊(duì)列存儲(chǔ)器109中的以太網(wǎng)消息隊(duì)列的定義以及各個(gè)消息隊(duì)列操作裝置的結(jié)構(gòu)進(jìn)行詳細(xì)說明。
串口消息隊(duì)列的定義如下typedef struct{int first;//第一條消息的索引號(hào)int last;//最后一條消息的索引號(hào)int len;//消息的總數(shù)SERIAL_CMD_ELEMENT element[SERIAL_CMD_MAXSIZE];} SERIAL_CMD_QUEUE;其中SERIAL_CMD_ELEMENT為消息結(jié)構(gòu),其定義如下typedef struct{int session;//會(huì)話ID,用以標(biāo)識(shí)消息int been_sent;//已經(jīng)被發(fā)送的次數(shù)int try_times;//重發(fā)次數(shù)struct timespec timeout_tv;//超時(shí)時(shí)間CMD_PACKET command;//發(fā)送給匯集卡的數(shù)據(jù)包SERIAL_CALLBACK before_callback;//消息初始化處理函數(shù)SERIAL_CALLBACK after_callback;//接收消息后的處理函數(shù)SERIAL_CALLBACK timeout_callback;//超時(shí)處理函數(shù)}SERIAL_CMD_ELEMENT;以太網(wǎng)消息隊(duì)列由三個(gè)消息隊(duì)列組成,發(fā)送消息隊(duì)列,重發(fā)消息隊(duì)列,接收消息隊(duì)列。
其中發(fā)送消息隊(duì)列和重發(fā)消息隊(duì)列的結(jié)構(gòu)是一樣的,定義如下typedef struct request_queue{Rqst_queue_element element[MAXQUEUELEN];gint 16 next[MAXQUEUELEN];guint16 first;//第一條消息的索引號(hào)guint16 last;//最后一條消息的索引號(hào)guint16 length;//消息的總數(shù)}request_queue;其中Rqst_queue_element為消息的結(jié)構(gòu),定義如下typedef struct Rqst_queue_element{Packet_Header request;//數(shù)據(jù)包頭guint16 receiver_id;//接收方IDgchar out_content[BSP_RECEIVE_BUFLEN];//數(shù)據(jù)包體guint 16 resend_times;//重發(fā)次數(shù)gdouble out_time_s;//發(fā)送點(diǎn)時(shí)間,秒gulong out_time_us;//微秒gdouble in_time_s;//檢查點(diǎn)時(shí)間,秒
gulong in_time_us;//微秒gboolean need_resend;//是否需要重發(fā)/*以下是消息處理的各種回調(diào)函數(shù)及其參數(shù)*/QueueCal lback before_rqst_callback_wrapper;gpointer before_rqst_parameter;gpointer before_rqst_object;QueueCallback after_rqst_callback_wrapper;gpointer after_rqst_parameter;gpointer after_rqst_object;QueueCallback discard_rqst_callback_wrapper;gpointer discard_rqst_parameter;gpointer discard_rqst_object;/*與其他內(nèi)部模塊的接口,包括會(huì)話ID和回調(diào)函數(shù)*/int cms_session;//會(huì)話ID,用以標(biāo)識(shí)消息EtherCallback ether_after_callback;EtherCallback ether_timeout_callback;}Rqst_queue_element;接收消息隊(duì)列定義如下typedef struct request_command_queue{CommandSession element[MAXQUEUELEN];gint16 next[MAXQUEUELEN];guint16 first;//第一條消息索引號(hào)guint16 last;//最后一條消息索引號(hào)guint16 length;//消息長度}request_command_queue;其中CommandSession為消息的結(jié)構(gòu),定義如下typedef struct CommandSession{gulong session;//會(huì)話ID,用以標(biāo)識(shí)消息guint8 type;//消息類型
gdouble s_time_s;//用于計(jì)算時(shí)間,秒gulong s_time_us;//微秒gulong limit_time;//限制時(shí)間gchar data[COMMAND_DATA_LEN];//接收數(shù)據(jù)包guint pos;//節(jié)點(diǎn)數(shù)gboolean has_response[FRAME_NUMBER_MAX+1];gboolean has_response2[FRAME_NUMBER_MAX+1][NODE_NUMBER_MAX+1];guint response_num;//由多少個(gè)節(jié)點(diǎn)返回gboolean has_send;//是否已經(jīng)發(fā)送gboolean finished;//是否完成/*與其他內(nèi)部模塊的接口,包括會(huì)話ID和回調(diào)函數(shù)*/gulong cms_session;EtherCallback ether_after_callback;EtherCallback ether_timeout_callback;}CommandSession;任務(wù)消息隊(duì)列定義如下typedef struct{int length;//隊(duì)列長度ELEMENT element[JOB_LIST_SIZE+1];}JOB_LIST;其中ELEMENT為任務(wù)消息結(jié)構(gòu),定義如下typedef struct{int used;/*0表示沒有使用,菲0表示已經(jīng)使用*/int prev;//上一任務(wù)int next;//下一任務(wù)JOB cmd;}ELEMENT;
其中JOB為任務(wù)消息結(jié)構(gòu)體的主體,定義如下typedef struct{int session;//會(huì)話ID,用以標(biāo)識(shí)消息time_t time_point;//任務(wù)執(zhí)行時(shí)間int serial_status;//串口狀態(tài)int ether_status;//以太網(wǎng)狀態(tài)int turn;//執(zhí)行次數(shù)Job_Info job;}JOB;串口消息隊(duì)列操作裝置102包括串口消息隊(duì)列初始化模塊(serial_cmd_queue_init()函數(shù)),用于在使用串口消息隊(duì)列之前作一些必要的初始化工作。初始化操作包括將隊(duì)列清零,設(shè)置隊(duì)列的last索引值。
創(chuàng)建串口消息隊(duì)列中消息的模塊(gen_serial_cmd()函數(shù)),用于創(chuàng)建一個(gè)符合串口消息結(jié)構(gòu)的消息。
向消息隊(duì)列中插入一條消息的模塊(register_serial_cmd()函數(shù))。
從消息隊(duì)列中刪除一條消息的模塊(serial_cmd_queue_remove()函數(shù))。
消息隊(duì)列中消息出隊(duì)模塊(serial_cmd_queue_first()函數(shù))。
查詢消息隊(duì)列長度的模塊(serial_cmd_queue length()函數(shù))。
消息隊(duì)列保護(hù)模塊,包括訪問消息隊(duì)列時(shí)加鎖操作模塊(lock_serial_cmd_queue()函數(shù))和開鎖操作模塊(unlock_serial_cmd_queue()函數(shù))。
以太網(wǎng)消息隊(duì)列操作裝置108包括消息隊(duì)列的保護(hù)模塊,包括以下鎖管理模塊lock_unsent_queue()函數(shù),unlock_unsent_queue()函數(shù),lock_unreplied_queue()函數(shù),unlock_unreplied_queue()函數(shù),lock_command_queue()函數(shù),unlock_command_queue()函數(shù)。
發(fā)送消息隊(duì)列的初始化模塊(rqst_unsent_queue_init()函數(shù))。
創(chuàng)建發(fā)送消息隊(duì)列的操作模塊(rqst_unsent_queue_element new_outer()函數(shù))。
發(fā)送消息隊(duì)列的入隊(duì)操作模塊(rqst_unsent_queue_append()函數(shù))。
發(fā)送消息隊(duì)列的出隊(duì)操作模塊(rqst_unsent_queue_get_first()函數(shù))。
刪除發(fā)送消息隊(duì)列中第一條消息的模塊(rqst_unsent_queue_delete_first()函數(shù))。
查詢發(fā)送消息隊(duì)列的長度的模塊(rqst_unsent_queue_length()函數(shù))。
重發(fā)消息隊(duì)列的初始化模塊(rqst_unreplied_queue_init()函數(shù))。
創(chuàng)建重發(fā)消息隊(duì)列的操作模塊(rqst_unreplied_queue_element_new_outer()函數(shù))重發(fā)消息隊(duì)列的入隊(duì)操作模塊(rqst_unreplied_queue_append()函數(shù))。
重發(fā)消息隊(duì)列的出隊(duì)操作模塊(rqst_unreplied_queue_get_first()函數(shù))。
刪除重發(fā)消息隊(duì)列中第一條消息的模塊(rqst_unreplied_queue_delete_first()函數(shù))。
查詢重發(fā)消息隊(duì)列的長度的模塊(rqst_unreplied_queue_length()函數(shù))。
在重發(fā)消息隊(duì)列中查詢消息的模塊(rqst_unreplied_queue_find()函數(shù))。
刪除重發(fā)消息隊(duì)列中任意消息的模塊(rqst_unreplied_queue_delete()函數(shù))。
接收消息隊(duì)列初始化模塊(command_queue_init()函數(shù))。
創(chuàng)建接收消息的模塊(command_queue_new()函數(shù)),該函數(shù)并不是創(chuàng)建一條完整的接收消息,因?yàn)榻邮盏膬?nèi)容不能確定,該函數(shù)只是在接收隊(duì)列中創(chuàng)建一個(gè)接收消息的位置,并把發(fā)送消息的會(huì)話號(hào)存儲(chǔ)在該消息中,以便于接收到消息后能找到對(duì)應(yīng)的存放位置。
刪除接收消息隊(duì)列中一條消息的模塊(command_queue_free()函數(shù))。
根據(jù)會(huì)話號(hào)查找消息的模塊(command_queue_find()函數(shù)),該函數(shù)用于在收到一條消息后能夠根據(jù)會(huì)話號(hào)找到相應(yīng)的存儲(chǔ)位置。
查詢接收消息隊(duì)列的長度的模塊(command_queue_length()函數(shù))接收消息隊(duì)列檢查模塊(command_queue_check()函數(shù)),該函數(shù)用于定期檢查接收消息的情況,以確定消息是否按時(shí)收到。
任務(wù)消息隊(duì)列操作裝置105包括任務(wù)消息隊(duì)列初始化模塊(job_list_init()函數(shù))。
查詢?nèi)蝿?wù)消息隊(duì)列長度的模塊(job_list_length()函數(shù))任務(wù)消息隊(duì)列入對(duì)操作模塊(job_list_append()函數(shù))。
刪除任務(wù)消息隊(duì)列中一條消息的模塊(job_list_remove()函數(shù))。
根據(jù)會(huì)話號(hào)查找消息的模塊(job_list_search_session()函數(shù))。
任務(wù)消息隊(duì)列的保護(hù)模塊(lock_job_list()函數(shù)和unlock_job_list()函數(shù))。
在BSP裝置中,通過匯集卡和NP裝置采集數(shù)據(jù)以及向匯集卡和NP裝置發(fā)送管理命令都是按輪次進(jìn)行的。
圖2為通過串口消息隊(duì)列操作裝置對(duì)串口消息隊(duì)列進(jìn)行操作的原理圖;如圖2所示,在每一輪,BSP主線程202通過串口消息隊(duì)列操作裝置203把采集一輪匯集卡所需要發(fā)送的命令插入串口消息隊(duì)列204。任務(wù)處理線程201首先查找用戶任務(wù)數(shù)據(jù)庫中是否有需要發(fā)送的任務(wù),如果有,則由任務(wù)處理裝置通過消息隊(duì)列操作裝置203將任務(wù)插入串口消息隊(duì)列204中,同時(shí),BSP主線程通過機(jī)群配置信息獲得機(jī)柜的數(shù)量,從而確定匯集卡的數(shù)量,對(duì)每一個(gè)機(jī)柜,BSP主線程通過串口消息隊(duì)列操作裝置中的gen_serial_cmd()函數(shù)生成一條數(shù)據(jù)采集消息并通過register_serial_cmd()函數(shù)將消息插入串口消息隊(duì)列中。
從串口消息隊(duì)列204中讀取消息并發(fā)送到匯集卡是由一個(gè)專門的串口操作線程來完成的,串口操作線程同時(shí)還負(fù)責(zé)接收匯集卡返回的消息,并調(diào)用相應(yīng)的處理函數(shù)作進(jìn)一步的處理。串口處理流程圖如圖3所示。
首先在步驟301,串口操作線程通過串口消息隊(duì)列操作裝置從串口消息隊(duì)列中讀取一條要被發(fā)送的消息組成通信包,并初始化該包;在步驟302根據(jù)串口消息的結(jié)構(gòu)中記錄的重發(fā)次數(shù)判斷該包的發(fā)送次數(shù)是否超出預(yù)定的重發(fā)次數(shù);如果該包的發(fā)送次數(shù)超出預(yù)定的重發(fā)次數(shù)時(shí),則調(diào)用該包的失敗回調(diào)函數(shù),并將通信包從串口消息隊(duì)列中刪除。如果該包的發(fā)送次數(shù)未超出預(yù)定的重發(fā)次數(shù)時(shí),則在步驟304則向匯集卡發(fā)送該包,并使發(fā)送次數(shù)加1;在步驟305判斷在預(yù)定的時(shí)間內(nèi)是否從匯集卡收到相應(yīng)的返回狀態(tài)包,如果沒有收到,則返回步驟302,否則進(jìn)行步驟306。在步驟306判斷接收的包的格式是否正確,如果其格式錯(cuò)誤,則返回步驟302,否則進(jìn)行步驟307調(diào)用數(shù)據(jù)處理回調(diào)函數(shù)以對(duì)接收的包進(jìn)行處理,并作為反饋消息插入在串口消息隊(duì)列中。
同樣,在BSP主線程中也向以太網(wǎng)消息隊(duì)列中插入采集一輪NP數(shù)據(jù)所需要發(fā)送的所有消息。不同于串口的是以太網(wǎng)消息的發(fā)送與接收所使用的消息隊(duì)列是分開的,并且對(duì)發(fā)送消息隊(duì)列與接收消息隊(duì)列的操作線程也是獨(dú)立的。對(duì)以太網(wǎng)消息隊(duì)列的操作如圖4所示,以及圖5和圖6示出對(duì)圖4中向以太網(wǎng)發(fā)送消息的操作和從以太網(wǎng)接收消息的操作的流程。
在圖4中,在任務(wù)處理線程401中,首先從用戶任務(wù)數(shù)據(jù)庫中察看是否有需要發(fā)送的任務(wù),如果有,則通過任務(wù)處理裝置將任務(wù)插入以太網(wǎng)消息發(fā)送隊(duì)列406中,同時(shí),BSP主線程通過機(jī)群配置信息獲得機(jī)柜的數(shù)量,往以太網(wǎng)消息發(fā)送隊(duì)列406中插入采集一輪NP數(shù)據(jù)所需要發(fā)送的所有消息。以太網(wǎng)發(fā)送線程409從發(fā)送隊(duì)列406中取出消息,發(fā)送給NP裝置,同時(shí)在重發(fā)隊(duì)列407中保存一份,并刪掉發(fā)送隊(duì)列406中的已經(jīng)發(fā)送的消息。接收線程410如果在規(guī)定的時(shí)間內(nèi)接收到以太網(wǎng)消息,放入接收隊(duì)列408,刪除重發(fā)隊(duì)列407中相應(yīng)的消息,如果在規(guī)定的時(shí)間內(nèi)沒有收到消息,則把重發(fā)隊(duì)列407中相應(yīng)的消息插入發(fā)送隊(duì)列406重發(fā)一次。消息之間的對(duì)應(yīng)關(guān)系是根據(jù)消息的session號(hào)來判斷的,并且在消息結(jié)構(gòu)中存儲(chǔ)了時(shí)間信息,用以判斷是否超時(shí)。
圖5詳細(xì)描述了圖4中的向以太網(wǎng)發(fā)送消息的以太網(wǎng)消息隊(duì)列操作的流程。首先,在步驟501通過以太網(wǎng)消息隊(duì)列裝置從以太網(wǎng)發(fā)送隊(duì)列中讀取一條消息,然后在步驟502判斷在發(fā)送消息之前是否要執(zhí)行回調(diào)函數(shù)。如果需要執(zhí)行,則在步驟503對(duì)消息執(zhí)行回調(diào)函數(shù)。否則在步驟504將該消息發(fā)送出去。同時(shí),在步驟505通過以太網(wǎng)消息隊(duì)列操作裝置在重發(fā)隊(duì)列中保存一個(gè)副本。并在步驟506通過以太網(wǎng)消息隊(duì)列操作裝置將發(fā)送隊(duì)列中的該條消息刪除。
圖6詳細(xì)描述了圖4中的從以太網(wǎng)接收消息的以太網(wǎng)消息隊(duì)列操作的流程。首先,在步驟601接收裝置不斷監(jiān)聽以太網(wǎng)接收端口。然后在步驟602定期檢查是否從以太網(wǎng)接收到消息。如果接收到消息,則在步驟603通過session(會(huì)話)號(hào)在接收隊(duì)列中查找消息的存放位置以存放該消息。由于每條消息中都記錄了消息接收后的回調(diào)函數(shù),在步驟604調(diào)用該函數(shù)對(duì)消息進(jìn)一步處理。如果沒有收到消息,則在步驟605檢查重發(fā)隊(duì)列中的每一條消息,判斷是否有超時(shí)消息。如果沒有超時(shí)消息,則繼續(xù)步驟601。如果判斷出有超時(shí)消息,則在步驟607判斷重發(fā)次數(shù)是否在規(guī)定次數(shù)之內(nèi),如果是則在步驟607通過以太網(wǎng)消息隊(duì)列操作裝置將需要重發(fā)的消息插入發(fā)送隊(duì)列中,以進(jìn)行重發(fā)。否則繼續(xù)監(jiān)聽。
下面將結(jié)合圖7描述通過本發(fā)明消息服務(wù)裝置的任務(wù)消息隊(duì)列操作裝置對(duì)任務(wù)消息隊(duì)列進(jìn)行的操作。在圖7中,任務(wù)處理線程702每一輪都要訪問一次數(shù)據(jù)庫701,查看是否有需要發(fā)送給匯集卡或NP裝置的操作任務(wù),如果有,則將任務(wù)創(chuàng)建為任務(wù)消息,插入任務(wù)消息隊(duì)列704,然后檢查任務(wù)消息隊(duì)列704中的每一條消息,將需要發(fā)送給匯集卡的消息通過串口消息隊(duì)列操作裝置705放入串口消息隊(duì)列,將需要發(fā)送給NP裝置的消息通過以太網(wǎng)消息隊(duì)列操作裝置706發(fā)送給以太網(wǎng)消息隊(duì)列中的發(fā)送隊(duì)列。
串口處理線程和以太網(wǎng)處理線程負(fù)責(zé)把任務(wù)消息發(fā)送出去,同時(shí)負(fù)責(zé)接收任務(wù)執(zhí)行情況的反饋信息,并更新任務(wù)消息隊(duì)列中相應(yīng)的消息的狀態(tài)。
任務(wù)處理線程702定期地檢查任務(wù)的執(zhí)行情況,修改任務(wù)的執(zhí)行狀態(tài)以及將任務(wù)執(zhí)行結(jié)果寫入數(shù)據(jù)庫中,從而控制臺(tái)從數(shù)據(jù)庫中讀入結(jié)果,報(bào)告給管理員。
因此,雖然對(duì)本發(fā)明進(jìn)行了描述,顯然,本發(fā)明在許多方面都可以變化。這樣的變化不應(yīng)該被看作脫離本發(fā)明的精神和范圍的變化,并且對(duì)于本領(lǐng)域的技術(shù)人員而言,應(yīng)該將所有這樣的修改限定在所附權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.一種用于機(jī)群監(jiān)控系統(tǒng)控制臺(tái)的消息服務(wù)裝置,包括匯集卡裝置,用于采集機(jī)群系統(tǒng)中一個(gè)機(jī)柜里所有節(jié)點(diǎn)的硬件數(shù)據(jù);節(jié)點(diǎn)中間代理(NP)裝置,用于采集機(jī)群系統(tǒng)中一個(gè)機(jī)柜里的所有節(jié)點(diǎn)的軟件數(shù)據(jù);基本服務(wù)提供者裝置(BSP),用于與所有匯集卡和所有NP裝置通信,采集機(jī)群系統(tǒng)中所有節(jié)點(diǎn)的硬件數(shù)據(jù)和軟件數(shù)據(jù);其中,所述基本服務(wù)提供者裝置包括串口通信裝置,用于對(duì)串口進(jìn)行操作,從而向匯集卡裝置發(fā)送或從匯集卡裝置接收消息;以太網(wǎng)通信裝置,用于對(duì)以太網(wǎng)進(jìn)行操作,從而向NP裝置發(fā)送或從NP裝置接收消息;串口消息隊(duì)列存儲(chǔ)器,用于存儲(chǔ)所有需要向匯集卡發(fā)送的消息和所有從匯集卡接收的消息,作為串口消息隊(duì)列;以太網(wǎng)消息隊(duì)列存儲(chǔ)器,用于存儲(chǔ)所有需要向NP裝置發(fā)送的消息和所有從NP裝置接收的消息,作為以太網(wǎng)消息隊(duì)列;任務(wù)消息隊(duì)列存儲(chǔ)器,用于存儲(chǔ)所有需要發(fā)送到匯集卡或NP裝置的操作任務(wù),作為任務(wù)消息隊(duì)列;串口消息隊(duì)列操作裝置,用于直接對(duì)串口消息隊(duì)列操作和維護(hù)串口消息隊(duì)列,從而為與匯集卡通信的串口通信裝置提供消息服務(wù);以太網(wǎng)消息隊(duì)列操作裝置,用于直接對(duì)以太網(wǎng)消息隊(duì)列操作和維護(hù)以太網(wǎng)消息隊(duì)列,從而為與NP裝置通信的以太網(wǎng)通信裝置提供消息服務(wù);任務(wù)消息隊(duì)列操作裝置,用于直接對(duì)任務(wù)消息隊(duì)列操作和維護(hù)任務(wù)消息隊(duì)列,從而為與NP裝置和匯集卡通信的串口通信裝置和以太網(wǎng)通信裝置關(guān)于任務(wù)的通信部分提供消息服務(wù);任務(wù)處理裝置,用于對(duì)機(jī)群管理員通過控制臺(tái)發(fā)送給節(jié)點(diǎn)的管理任務(wù)進(jìn)行處理。
2.如權(quán)利要求1所述的消息服務(wù)裝置,其特征在于所述以太網(wǎng)消息隊(duì)列由發(fā)送消息隊(duì)列,接收消息隊(duì)列,重發(fā)消息隊(duì)列組成。
3.如權(quán)利要求1所述的消息服務(wù)裝置,其特征在于所述串口消息隊(duì)列操作裝置包括初始化模塊、創(chuàng)建消息模塊、消息插入模塊、消息刪除模塊、消息入隊(duì)模塊和消息出隊(duì)模塊、長度查詢模塊,以及用于對(duì)串口消息隊(duì)列的訪問進(jìn)行保護(hù)的串口消息隊(duì)列保護(hù)模塊。
4.如權(quán)利要求3所述的消息服務(wù)裝置,其特征在于該串口消息隊(duì)列保護(hù)模塊包括在對(duì)串口消息隊(duì)列進(jìn)行操作時(shí)的加鎖模塊和在對(duì)串口消息隊(duì)列操作完成后的開鎖模塊。
5.如權(quán)利要求1所述的消息服務(wù)裝置,其特征在于所述以太網(wǎng)消息隊(duì)列操作裝置包括初始化模塊、創(chuàng)建消息模塊、隊(duì)列操作模塊以及用于對(duì)訪問的以太網(wǎng)消息隊(duì)列進(jìn)行保護(hù)的以太網(wǎng)消息隊(duì)列保護(hù)模塊。
6.如權(quán)利要求5所述的消息服務(wù)裝置,其特征在于所述以太網(wǎng)消息隊(duì)列保護(hù)模塊包括在對(duì)以太網(wǎng)消息隊(duì)列進(jìn)行操作時(shí)的加鎖模塊和在對(duì)以太網(wǎng)消息隊(duì)列操作完成后的開鎖模塊。
7.如權(quán)利要求2所述的消息服務(wù)裝置,其特征在于所述以太網(wǎng)消息隊(duì)列操作裝置包括初始化模塊、創(chuàng)建消息模塊、發(fā)送隊(duì)列操作模塊、重發(fā)隊(duì)列操作模塊、接收隊(duì)列操作模塊以及用于對(duì)訪問的接收隊(duì)列進(jìn)行保護(hù)的以太網(wǎng)消息發(fā)送隊(duì)列保護(hù)模塊、以太網(wǎng)消息重發(fā)隊(duì)列保護(hù)模塊、以太網(wǎng)消息接收隊(duì)列保護(hù)模塊;
8.如權(quán)利要求7所述的消息服務(wù)裝置,其特征在于所述各個(gè)以太網(wǎng)消息隊(duì)列保護(hù)模塊都包括在對(duì)以太網(wǎng)消息隊(duì)列進(jìn)行操作時(shí)的加鎖模塊和在對(duì)以太網(wǎng)消息隊(duì)列操作完成后的開鎖模塊。
9.如權(quán)利要求1所述的消息服務(wù)裝置,其特征在于所述的任務(wù)消息隊(duì)列操作裝置包括初始化模塊、創(chuàng)建消息模塊、消息刪除模塊、消息入隊(duì)模塊和消息出隊(duì)模塊、長度查詢模塊、用于根據(jù)會(huì)話號(hào)查找消息的消息查找模塊以及用于對(duì)訪問的任務(wù)消息隊(duì)列進(jìn)行保護(hù)的任務(wù)消息隊(duì)列保護(hù)模塊。
10.如權(quán)利要求9所述的消息隊(duì)列保護(hù)模塊,其特征在于任務(wù)消息隊(duì)列保護(hù)模塊包括在對(duì)任務(wù)消息隊(duì)列進(jìn)行操作時(shí)的加鎖模塊和在對(duì)任務(wù)消息隊(duì)列操作完成后的開鎖模塊。
11.一種用于機(jī)群監(jiān)控系統(tǒng)控制臺(tái)的消息服務(wù)方法,用于基本服務(wù)提供者裝置經(jīng)串口和以太網(wǎng)分別與所有匯集卡和所有NP裝置通信從而采集機(jī)群系統(tǒng)中所有節(jié)點(diǎn)的硬件數(shù)據(jù)和軟件數(shù)據(jù),所述的方法包括對(duì)串口消息隊(duì)列執(zhí)行操作從而通過串口通信裝置向匯集卡提供串口消息服務(wù)以及從匯集卡接收反饋消息的步驟;對(duì)以太網(wǎng)消息隊(duì)列執(zhí)行操作從而通過以太網(wǎng)通信裝置向NP裝置提供以太網(wǎng)消息服務(wù)并從以太網(wǎng)接收反饋消息的步驟;對(duì)任務(wù)消息隊(duì)列執(zhí)行操作從而向串口消息隊(duì)列和以太網(wǎng)消息隊(duì)列提供任務(wù)并提供任務(wù)執(zhí)行結(jié)果的步驟。
12.如權(quán)利要求11所述的消息服務(wù)方法,其特征在于向匯集卡提供串口消息服務(wù)以及從匯集卡接收反饋消息的步驟包括(a)通過串口消息隊(duì)列操作裝置把采集一輪匯集卡所需要發(fā)送的命令插入串口消息隊(duì)列;(b)查看用戶任務(wù)數(shù)據(jù)庫是否有需要發(fā)送的任務(wù),在確定有需要發(fā)送的任務(wù)時(shí),由任務(wù)處理裝置通過串口消息隊(duì)列操作裝置將任務(wù)插入串口消息隊(duì)列中;(c)根據(jù)機(jī)柜的數(shù)量確定匯集卡的數(shù)量,對(duì)每一個(gè)機(jī)柜,通過串口消息隊(duì)列操作裝置中生成一條數(shù)據(jù)采集消息并將該消息插入串口消息隊(duì)列中;(d)從串口消息隊(duì)列中讀取消息并發(fā)送到匯集卡以及從匯集卡接收消息。
13.如權(quán)利要求12所述的消息服務(wù)方法,其特征在于步驟(d)包括(i)從串口消息隊(duì)列中讀取一條要被發(fā)送的消息組成通信包,并初始化該包;(ii)判斷該包的發(fā)送次數(shù)是否超出預(yù)定的重發(fā)次數(shù);(iii)在該包的發(fā)送次數(shù)超出預(yù)定的重發(fā)次數(shù)時(shí),將該包從串口消息隊(duì)列中刪除;(iv)在該包的發(fā)送次數(shù)未超出預(yù)定的重發(fā)次數(shù)時(shí),則向匯集卡發(fā)送該包,并使發(fā)送次數(shù)加1;(v)在預(yù)定的時(shí)間內(nèi)如果沒有從匯集卡收到相應(yīng)的返回狀態(tài)包,則重復(fù)步驟(ii);(vi)檢查包的格式是否正確;(vii)在該包的格式不正確時(shí)重復(fù)步驟(ii);(viii)對(duì)該包進(jìn)行預(yù)定處理并作為反饋消息插入在串口消息隊(duì)列中。
14.如權(quán)利要求11所述的消息服務(wù)方法,其特征在于向NP裝置提供以太網(wǎng)消息服務(wù)并從NP裝置接收反饋消息的步驟包括(a)查看用戶任務(wù)數(shù)據(jù)庫中是否有需要發(fā)送的任務(wù),如果有,則通過任務(wù)處理裝置將任務(wù)插入以太網(wǎng)消息發(fā)送隊(duì)列中;(b)向以太網(wǎng)消息發(fā)送隊(duì)列中插入采集一輪NP數(shù)據(jù)所需要發(fā)送的所有消息;(c)從發(fā)送隊(duì)列中取出消息,發(fā)送給NP裝置,同時(shí)在重發(fā)隊(duì)列中保存該消息的副本;(d)判斷是否從NP裝置接收到以太網(wǎng)返回消息;(e)在接收到以太網(wǎng)返回消息時(shí),通過會(huì)話號(hào)在接收隊(duì)列中查找該消息的存放位置以插入該消息;(f)對(duì)該消息進(jìn)行預(yù)定處理;(g)在發(fā)送隊(duì)列中將已經(jīng)發(fā)送的該條發(fā)送消息刪除;(h)在沒有接收到以太網(wǎng)返回消息時(shí),檢查重發(fā)隊(duì)列中是否存在超時(shí)消息;(i)在存在超時(shí)消息時(shí),判斷重發(fā)次數(shù)是否在預(yù)定次數(shù)之內(nèi);(j)在重發(fā)次數(shù)在預(yù)定次數(shù)之內(nèi)時(shí),重發(fā)該消息;(k)將重發(fā)的消息插入發(fā)送隊(duì)列中。
15.如權(quán)利要求11所述的消息服務(wù)方法,其特征在于向串口消息隊(duì)列和以太網(wǎng)消息隊(duì)列提供任務(wù)并提供任務(wù)執(zhí)行結(jié)果的步驟包括(a)由任務(wù)處理裝置從用戶任務(wù)數(shù)據(jù)庫中讀入管理員的管理命令作為任務(wù);(b)根據(jù)任務(wù)的類型創(chuàng)建消息并將該消息插入任務(wù)消息隊(duì)列中;(c)判斷該消息是發(fā)送給匯集卡還是發(fā)送給NP裝置;(d)在該消息是發(fā)送給匯集卡的消息時(shí),通過串口消息隊(duì)列操作裝置將消息插入串口消息隊(duì)列中,(e)在該消息是發(fā)送給NP裝置的消息時(shí),通過以太網(wǎng)消息隊(duì)列操作裝置將消息插入到以太網(wǎng)消息隊(duì)列中;(f)由任務(wù)處理裝置定期檢查任務(wù)的執(zhí)行情況,并修改任務(wù)的執(zhí)行狀態(tài);(g)將任務(wù)執(zhí)行結(jié)果寫入數(shù)據(jù)庫中,從而機(jī)群管理員通過控制臺(tái)從數(shù)據(jù)庫中讀出該結(jié)果。
全文摘要
本發(fā)明提供一種用于機(jī)群監(jiān)控系統(tǒng)控制臺(tái)的消息服務(wù)裝置,包括匯集卡裝置;節(jié)點(diǎn)中間代理裝置;用于采集機(jī)群系統(tǒng)中所有節(jié)點(diǎn)的硬件數(shù)據(jù)和軟件數(shù)據(jù)的基本服務(wù)提供者裝置;其中,所述基本服務(wù)提供者裝置包括串口通信裝置;以太網(wǎng)通信裝置;用于存儲(chǔ)串口消息隊(duì)列的串口消息隊(duì)列存儲(chǔ)器;用于存儲(chǔ)以太網(wǎng)消息隊(duì)列的以太網(wǎng)消息隊(duì)列存儲(chǔ)器;用于存儲(chǔ)任務(wù)消息隊(duì)列的任務(wù)消息隊(duì)列存儲(chǔ)器;串口消息隊(duì)列操作裝置;以太網(wǎng)消息隊(duì)列操作裝置;任務(wù)消息隊(duì)列操作裝置以及用于對(duì)機(jī)群管理員通過控制臺(tái)發(fā)送給節(jié)點(diǎn)的管理任務(wù)進(jìn)行處理的任務(wù)處理裝置;以及公開了一種消息服務(wù)方法。由此根據(jù)本發(fā)明提供的消息服務(wù)裝置及方法,可以提高控制臺(tái)對(duì)所有通信消息進(jìn)行管理的效率。
文檔編號(hào)G06F9/06GK1677340SQ20041003146
公開日2005年10月5日 申請(qǐng)日期2004年3月29日 優(yōu)先權(quán)日2004年3月29日
發(fā)明者金正操, 易昭華, 陳又新, 崔吉順, 饒弋寧, 陳然, 李金麗, 蔣曉華, 張羽飛, 程菊生 申請(qǐng)人:聯(lián)想(北京)有限公司