專利名稱:各組件進程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法
技術領域:
本發(fā)明涉及一種計算機程序進程之間的通信方法,確切地說,涉及一種用于大型軟件系統(tǒng)的各組件進程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法,屬于計算機軟件、尤其是大型電信軟件技術領域。
背景技術:
根據應用目的和實現(xiàn)環(huán)境的不同,計算機軟件系統(tǒng)的不同進程間的通信可分為兩種方式同一物理實體內的進程間通信和不同物理實體內的進程間通信。
同一物理實體內的進程間通信的主要目的是實現(xiàn)同一計算機系統(tǒng)內部的相互協(xié)作的各個程序進程之間的數據共享與信息交換,由于這些程序進程所處的軟件和硬件環(huán)境都是相同的,利用操作系統(tǒng)提供的實現(xiàn)機制和編程接口,用戶可以方便地在程序中實現(xiàn)這種通信,且能夠保證各進程間可以進行快速的信息交換和大量數據的共享。先進先出FIFO管道、共享內存等技術最適合用于同一計算機系統(tǒng)內部的進程間通信,并可以保證高效率。
不同物理實體內的進程間通信的主要目的是實現(xiàn)不同計算機系統(tǒng)中的相互協(xié)作的應用程序進程之間的數據共享與信息交換,由于應用程序進程分別運行于不同的計算機系統(tǒng)中,它們之間必須通過網絡之間的通信協(xié)議才能實現(xiàn)數據共享與信息交換?;赥CP/IP協(xié)議的socket編程就是一種典型的不同物理實體內的進程間通信技術。它既可適用于客戶端/服務器通信方式,也能適用于點對點通信方式。由于socket方式不受程序位置的影響,可以實現(xiàn)跨機器、跨網絡的通信,最適用于遠程的應用程序之間通信,可以簡化通信的編程,當然也保證通信的可靠性?,F(xiàn)行大多數的不同物理實體內的應用程序間的通信都是采取這種方式。
在具體實現(xiàn)時,究竟采用何種通信方式,需要考慮到不同進程間通信的各種實際要求,例如通信量,通信協(xié)議,通信效率等。
目前,在大型應用軟件系統(tǒng)中,進程間的通信非常頻繁和復雜,尤其是大型的電信業(yè)務應用軟件系統(tǒng)。首先,電信業(yè)務應用軟件非常龐大,為了保證高可用性、高可靠性和可擴展性,往往要把這些軟件系統(tǒng)分成不同的組件,而且要把各個組件分布到若干物理實體上去,并聯(lián)接成網,構成一個分布式業(yè)務軟件系統(tǒng);這樣組件各個進程之間的通信就非常頻繁。其次,目前各組件進程之間往往采取直接通信的方式,由于進程數量很大,這樣就造成了一個很大的網狀通信網,進程間的通信不但變得非常復雜,而且給進程的管理提出了很高的要求。再者,由于各組件處理的業(yè)務消息千差萬別,每個進程就需要能夠處理各種不同類型的消息,嚴重影響了進程的業(yè)務功能。另外,由于電信業(yè)務發(fā)展很快,新的業(yè)務組件會不斷地加入到原有的業(yè)務系統(tǒng)軟件中來,新組件的進程就要和舊組件的進程進行通信。由于新業(yè)務的消息不同于原有業(yè)務軟件系統(tǒng)所能處理的類型,這樣舊的組件就必須要進行修改。
由此可見,目前組件進程間通信的上述缺點,嚴重影響了大型軟件系統(tǒng)的開發(fā)和效能,已經成為業(yè)界一個急需解決的技術關鍵。
發(fā)明內容
有鑒于此,本發(fā)明的目的是提供一種用于大型軟件系統(tǒng)的各組件進程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法,該方法采用通用消息總線方法,各組件進程之間傳遞的都是通用消息,從而使得進程間的通信關系大大簡化,并降低通信復雜度,克服目前進程間通信的各種缺點。
為了達到上述目的,本發(fā)明提供了一種用于大型軟件系統(tǒng)的各組件進程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法,其特征在于該方法包括下列步驟(1)設置各組件進程間的通信都必須采用的統(tǒng)一、規(guī)范的通用消息的格式,且以會話session形式進行消息的交互;(2)將每個組件劃分為具有不同功能的三個階層,從底層到高層依次為通信鏈路層、消息分發(fā)層、業(yè)務消息處理層;
(3)在系統(tǒng)中設置通用消息分發(fā)組件msgr,該通用消息分發(fā)組件msgr專用于分發(fā)各進程間交互的通用消息,并由具有通用消息中轉功能的其它組件進行輔助分發(fā);(4)各組件進程間通信的通用消息按照設定的路由算法進行分發(fā)。
本發(fā)明是一種用于大型軟件系統(tǒng)的各組件進程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法,該方法的優(yōu)點和效果介紹如下該方法采用通用消息總線進行各進程之間的通信交互,各進程間傳遞的都是通用消息,其中業(yè)務通信采用業(yè)務類型的消息,管理通信采用管理類型的消息,從而使得進程間的通信關系大大簡化,并且顯著降低了通信復雜度。
基于通用消息總線接口,使得組件的底層通信模塊可以設計得非常簡單,而且可以不加修改地在任何程序中使用。對于不同的外部協(xié)議消息,本發(fā)明采用在通信鏈路層中設置消息適配模塊來進行轉換,以保證這些外部協(xié)議消息能夠在消息分發(fā)層以本發(fā)明通用消息的同樣方式進行處理。該消息適配模塊分布在不同的系統(tǒng)前端組件中,這樣可以做到系統(tǒng)復雜度的分散,保證了軟件系統(tǒng)的整體可靠性。而且,一旦需要增加新功能時,只需開發(fā)上層業(yè)務消息處理層的相關功能模塊,無須修改下面兩層的程序模塊,對軟件系統(tǒng)改動小,且不影響原有的各種功能模塊,擴展方便。再者,本發(fā)明對組件進程的功能劃分趨于合理,組件進程的三層結構層次清晰,各功能模塊之間實現(xiàn)松耦合,進程運行時相互依賴程度較低,能夠保證系統(tǒng)運行的可靠性??傊景l(fā)明具有很好的工程推廣應用價值和前景。
圖1是本發(fā)明用于大型軟件系統(tǒng)的各組件進程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法的流程方框圖。
圖2是本發(fā)明方法中設置的通用消息字段示意圖。
圖3是本發(fā)明方法中將每個程序劃分為不同功能的三層結構示意圖。
圖4是本發(fā)明方法中的路由消息轉發(fā)示意圖。
圖5是本發(fā)明方法的一實施例原來的SCP系統(tǒng)的進程關系示意圖。
圖6是采用本發(fā)明方法的一實施例新SCP系統(tǒng)的進程關系示意圖。
圖7是根據路由表選路的示意圖。
具體實施例方式
為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面結合附圖對本發(fā)明作進一步的詳細描述。
參見圖1,介紹本發(fā)明用于大型軟件系統(tǒng)的各組件進程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法的具體操作步驟(1)設置各組件進程間的通信都必須采用的統(tǒng)一、規(guī)范的通用消息的格式,且以會話session形式進行消息的交互;(2)將每個組件劃分為具有不同功能的三個階層,從底層到高層依次為通信鏈路層、消息分發(fā)層、業(yè)務消息處理層;(3)在系統(tǒng)中設置通用消息分發(fā)組件msgr,該通用消息分發(fā)組件msgr專用于分發(fā)各進程間交互的通用消息,并由具有通用消息中轉功能的其它組件進行輔助分發(fā);(4)各組件進程間通信的通用消息按照設定的路由算法進行分發(fā)。
下面對上述操作步驟作具體說明參見圖2,介紹上述步驟(1)中設置的統(tǒng)一、規(guī)范的通用消息格式中各個字段的名稱、字符和其含義1)同步頭(sync header)主要用于消息錯位時的恢復,字段長為N個字節(jié),自然數N≥4,其中前N-1字節(jié)和最后一個字節(jié)分別為十六進制的FF和00;組件應能識別大于4字節(jié)的同步頭,當通信鏈路層檢測到接收消息出現(xiàn)錯位后,就清空當前緩沖區(qū),進入尋找同步頭狀態(tài),當N為4、且通信鏈路層接收到連續(xù)三個以上的FF并緊接一個00時,則認為已取得同步,開始接收新的消息;2)版本號(vrsn)字段長為一個字節(jié),正整數;3)保留字段(reserved)字段長為一個字節(jié),填為全0;
4)消息包總長度(packet length)是包括包頭、但不包括同步頭的消息包總長度,字段長為兩個字節(jié),最大包長為65535;5)消息類型編號(message type)字段長為一個字節(jié);6)消息編號(message code)字段長為一個字節(jié);7)消息分片指示(TPDU-NR and EOT)字段長為一個字節(jié),其最高位比特的兩個不同數值分別表示該消息包是否為該消息的最后一個消息包(例如0是,1不是),后7位比特表示該消息包為該消息中的消息包的順序號,8)源地址域編號(source domainId)字段長為一個字節(jié);9)源地址功能實體類型編號(source feId)字段長為一個字節(jié);10)源地址功能實體實例編號(source instanceId)字段長為一個字節(jié);11)源地址會話號(source sessionId)字段長為四個字節(jié);12)目的地址域編號(destination domainId)字段長為一個字節(jié);13)目的地址功能實體類型編號(destination feId)字段長為一個字節(jié);14)目的地址功能實體實例編號(destination instanceId)字段長為一個字節(jié);15)目的地址會話號(destination sessionId)字段長為四個字節(jié);16)消息序列號(sequence number)字段長為一個字節(jié),用于同一會話中連續(xù)發(fā)送多條消息時對這些消息進行排序,以確保接收端能夠以與發(fā)送端相同的順序來處理這些消息;而消息發(fā)送端應保證同一會話中的發(fā)送消息序列號是從1開始順序遞增;17)消息包生存時間(time to live)字段長為一個字節(jié),用于表示轉發(fā)次數,消息每被轉發(fā)一次,該數值減1,減為0時丟棄該消息,以確保消息轉發(fā)時不會出現(xiàn)無限循環(huán);18)消息包內容(message content)字段長為N個字節(jié),N的取值范圍
。
下面對上述通用消息的字段中的術語進行解釋域編號(domainId)是指對系統(tǒng)運行時所在的物理機器或者系統(tǒng)所屬的帳號進行的順序排號,其有效取值范圍為
,其中0和255分別為特殊意義的保留值0表示本地域,255表示所有的域;功能實體類型編號(feId)是從功能實體的類型角度對功能實體進行的順序排號,該功能實體是指系統(tǒng)內完成設定功能的組件;功能實體實例編號(instanceId)在系統(tǒng)運行時,同一個組件可以有多個進程實例,功能實體實例編號是對系統(tǒng)運行時在同一個域內的同種類型功能實體的多個進程實例而分別分配的不同的實例編號,屬于域內的資源;因此對于不同域的功能實體實例,其實例編號可以取相同的值;域編號、功能實體類型編號和功能實體實例編號的組合在軟件系統(tǒng)范圍內唯一地確定了一個功能實體的實例或進程,由該三者構成該進程的地址,分發(fā)功能模塊通過該三者的組合將消息送到正確的目的進程。
會話號(sessionId)為了統(tǒng)一所有消息,本發(fā)明把組件進程間需要完成的所有業(yè)務交互過程都映射為會話過程。會話號(sessionId)是每一個進程內部對它的每一個會話所進行的編號,故會話號是一種本地資源,每一個進程都必須并且只能對自己的會話號進行分配,以確保本進程中任意兩個活動會話的會話號是不相同的。每一次會話則由源端和目的端的功能實體域編號、功能實體類型編號、功能實體實例編號和會話號的組合唯一確定;為了在同一進程中對不同的會話進行標識,通用消息中還包含有消息的源進程和目的進程分別為該會話消息分配的會話號源會話號和目的會話號。
本發(fā)明的通用消息分為兩類鏈路管理消息和業(yè)務消息。鏈路管理消息的消息類型編號為1,業(yè)務消息的消息類型編號為2,消息類型編號如下面的表1所示
鏈路管理消息用于相互連接的兩個進程互相向對方傳遞本鏈路的狀態(tài)信息,需要注意的是兩個進程之間可能同時存在多個鏈路,因此這里的狀態(tài)信息僅指本鏈路的狀態(tài),并不完全等同與對端進程的連接狀態(tài)。鏈路管理消息的交互由底層的通信鏈路層維護,不涉及上層模塊。各種鏈路管理消息的編號和功能說明可參見下面的表2所示
業(yè)務消息是帶有具體內容的消息,用于在各個進程之間傳送業(yè)務數據。根據會話的過程,可以分為開始、確認、繼續(xù)、結束、終止等幾種。各種業(yè)務消息的編號和功能說明可參見下面的表3所示
參見圖3,介紹本發(fā)明中劃分為三層架構的組件的具體功能分別是
通信鏈路層,負責維護與其他進程通信的鏈路連接接收鏈路上到達的消息,提交到消息分發(fā)層;從消息分發(fā)層接收由消息處理層下發(fā)的消息,并發(fā)送到鏈路上;實現(xiàn)鏈路連接的方式為TCP socket、FIFO、或共享內存方式的通信連接;消息分發(fā)層,負責消息分發(fā),包括消息在進程內部的分發(fā)以及到其他進程的分發(fā),當進程不具有消息中轉功能時,該層從通信鏈路層接收提交的消息,上報到本地的上層消息處理層作繼續(xù)處理;當進程具有消息中轉功能時,該層從通信鏈路層接收消息,分析該消息的目的地址,如果該消息的目的地址是本進程,則提交到本地消息處理層處理;否則,查找合適的路由,并選擇通信鏈路層的相應鏈路,將消息發(fā)送到正確的鏈路上;業(yè)務消息處理層負責消息的拆分和組合,其中消息的分片機制對通信鏈路層和消息分發(fā)層是透明的,接收從消息分發(fā)層上報的業(yè)務消息,并尋找合適的功能模塊對該消息處理,再將該層內具體功能模塊處理該消息后產生的業(yè)務消息向下交給消息分發(fā)層分發(fā)。該業(yè)務消息處理層只負責業(yè)務消息的處理,因為用于鏈路管理的管理類消息都由通信鏈路層直接處理,不會上報到業(yè)務消息處理層。該層設有能夠對各種不同的通用消息類型進行相應處理的多種功能模塊,并藉此體現(xiàn)不同組件的具體功能差異,即各個組件具體功能的差異主要體現(xiàn)在該層的實現(xiàn)上。
本發(fā)明步驟(4)中所述的路由算法是通過查找路由表來獲得通用消息的路由信息,本發(fā)明的路由表的表項是格式為<目的地址,目的掩碼,下一跳地址,下一跳掩碼>的四元組,其中,目的地址和下一跳地址都表示為domainId.feId.instanceId,即域編號.功能實體類型編號.功能實體實例編號,目的掩碼和下一跳掩碼均指功能實體實例編號instanceId的掩碼。
參見圖4,介紹通用消息在進行路由轉發(fā)時,分為四種類型①類消息從本進程發(fā)送到其他進程的消息,②類消息由其他進程發(fā)送到本進程的消息,③類消息;進程內部傳遞的消息,④類消息經由通用消息分發(fā)組件msgr中轉的消息。特別地,其中A類和D類消息都需要根據目的進程地址使用路由表選路,其操作步驟為(1)保持目的進程地址中的域編號和功能實體類型編號不變,但將目的進程地址中的功能實體實例編號instanceId與四元組中的目的掩碼進行“與”操作,再將計算結果與路由表里每個表項四元組中的目的地址進行比較,如果兩者相等,則選擇該表項四元組中對應的下一跳地址和下一跳掩碼,繼續(xù)執(zhí)行后續(xù)步驟(2)操作;如果兩者不相等,則丟棄該消息,操作結束;(2)保持該表項四元組中對應的下一跳地址中的域編號.功能實體類型編號不變,但將該表項四元組中對應的下一跳地址中的功能實體實例編號進行如下計算真正的下一跳地址的操作(X∨M)∧(R∨M),即先分別將下一跳地址中標記為X的功能實體實例編號instanceId和標記為M的下一跳掩碼的反M進行“或”操作,接著將一個標記為R的隨機數和下一跳掩碼M進行“或”操作,再將該兩個操作結果進行“與”操作,最后得到的結果才是真正的下一跳地址。
此外,通用消息在進程間進行尋址時,必須遵循以下兩個原則A、目的域編號domainId和目的功能實體類型編號feId不為零、但目的功能實體實例編號instanceId為零時,由消息分發(fā)功能模塊將該消息轉發(fā)到目的域,再依據設定的負荷分擔算法在本域內根據目的feId選擇一個正確類型的功能實體實例編號instanceId進行分發(fā);消息分發(fā)功能模塊對同一條消息的負荷分擔只能實施一次,一旦確定了消息的目的功能實體實例編號instanceId,即將消息頭中的目的地址中的功能實體實例字段填寫成該功能實體實例字段填寫成實際數值。
B、目的域編號domainId、目的功能實體類型編號feId和目的功能實體實例編號instanceId都不為零時,消息分發(fā)功能模塊在分發(fā)時不使用設定的負荷分擔機制,而是根據路由表選擇下一跳實例地址;如果沒有滿足條件的下一跳實例地址,則丟棄該消息并報錯。
本發(fā)明方法已經在東信北郵信息技術有限公司的業(yè)務控制點SCP組件系統(tǒng)中進行了試驗實施。下面簡要地說明該實施例的試驗情況參見圖5,原SCP組件系統(tǒng)中的各個組件進程之間未采用通用消息總線,圖中單向箭頭表示進程的創(chuàng)建和守護,雙向菱形箭頭表示共享內存方式的消息交互,雙向空心箭頭表示FIFO方式的消息的交互,雙向箭頭表示采用SOCKET連接方式來交互消息。該圖表明原SCP系統(tǒng)各組件進程之間的消息交互關系是非常復雜的,這樣勢必影響系統(tǒng)組件的工作穩(wěn)定性,增加運行維護工作量。
參見圖6,介紹采用本發(fā)明的通用消息總線后,大為簡化的各個進程之間的消息交互關系。組成該SCP設備的進程有系統(tǒng)守護進程ininit,專用于通用消息分發(fā)的進程msgr,業(yè)務控制進程SCF,業(yè)務數據進程SDF,控制臺進程inaccess_server,性能監(jiān)測進程inperf,以n7server為代表的各種外部實體接口進程。這些進程之間都采用的通用消息總線進行消息交互,其中雙向空心箭頭表示業(yè)務消息的通信交互,單向箭頭表示管理消息的通信交互??梢钥闯觯赟CP系統(tǒng)中,采用本發(fā)明軟件系統(tǒng)的各組件進程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法,能夠使該SCP系統(tǒng)的多進程通信方式變得更為靈活和可靠。
參見圖7,介紹本發(fā)明根據路由表選路的具體操作步驟。
假設某個SCF進程的地址為1.1.1,要與n7server四個進程2.3.4、2.3.5、2.3.6和2.3.7進行通信,通用消息要通過msgr進程1.2.2和1.2.3中轉。SCF進程中對應的路由表表項為<2.3.4,252,1.2.2,254>。其操作步驟如下(1)假設該SCF進程需要向n7server目的進程2.3.5發(fā)消息時,由于2.3.(5&252)=2.3.4,則選中該路由表表項<2.3.4,252,1.2.2,254>。
(2)這個表項中的下一跳地址為1.2.2,下一跳掩碼為254。為得到真正的下一跳地址,將表項中的下一跳地址中的功能實體實例編號2與下一跳掩碼254的反進行“或”運算2|254=3;再取一個隨機數9,與下一跳掩碼進行或運算9|254=255;然后再對上述兩個運算結果進行“與”運算255&3=3,所以真正的下一跳地址為1.2.3。
權利要求
1.一種用于大型軟件系統(tǒng)的各組件進程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法,其特征在于該方法包括下列操作步驟(1)設置各組件進程間的通信都必須采用的統(tǒng)一、規(guī)范的通用消息的格式,且以會話session形式進行消息的交互;(2)將每個組件劃分為具有不同功能的三個階層,從底層到高層依次為通信鏈路層、消息分發(fā)層、業(yè)務消息處理層;(3)在系統(tǒng)中設置通用消息分發(fā)組件msgr,該通用消息分發(fā)組件msgr專用于分發(fā)各進程間交互的通用消息,并由具有通用消息中轉功能的其他組件進行輔助分發(fā);(4)各組件進程間通信的通用消息按照設定的路由算法進行分發(fā)。
2.根據權利要求1所述的各組件進程之間統(tǒng)一通信的實現(xiàn)方法,其特征在于所述通用消息的格式至少包括下述字段同步頭sync header用于消息錯位時的恢復,字段長為N個字節(jié),自然數N≥4,其中前N-1字節(jié)和最后一個字節(jié)分別為十六進制的FF和00;組件應能識別大于4字節(jié)的同步頭,當通信鏈路層檢測到接收消息出現(xiàn)錯位后,就清空當前緩沖區(qū),進入尋找同步頭狀態(tài),當N為4時,且通信鏈路層接收到連續(xù)三個以上的FF并緊接一個00時,則認為已取得同步,就開始接收新的消息;版本號vrsn字段長為一個字節(jié),正整數;保留字段reserved字段長為一個字節(jié),填為全0;消息包總長度packet length是包括包頭、但不包括同步頭的消息包總長度,字段長為兩個字節(jié),最大包長為65535;消息類型編號message type字段長為一個字節(jié);消息編號message code字段長為一個字節(jié);消息分片指示TPDU-NR and EOT字段長為一個字節(jié),其最高位比特的兩個不同數值分別表示該消息包是否為該消息的最后一個消息包,后7位比特表示該消息包為該消息中的消息包的序號;源地址域編號source domainId字段長為一個字節(jié);源地址功能實體類型編號source feId字段長為一個字節(jié);源地址功能實體實例編號source instanceId字段長為一個字節(jié);源地址會話號source sessionId字段長為四個字節(jié);目的地址域編號destination domainId字段長為一個字節(jié);目的地址功能實體類型編號destination feId字段長為一個字節(jié);目的地址功能實體實例編號destination instanceId字段長為一個字節(jié);目的地址會話號destination sessionId字段長為四個字節(jié);消息序列號sequence number字段長為一個字節(jié),用于同一會話中連續(xù)發(fā)送多條消息時對這些消息進行排序,以確保接收端能夠以與發(fā)送端相同的順序來處理這些消息;而消息發(fā)送端則應保證同一會話中的發(fā)送消息序列號是從1開始順序遞增;消息包生存時間time to live字段長為一個字節(jié),用于表示轉發(fā)次數,消息每被轉發(fā)一次,該數值減1,減為0時丟棄該消息,以確保消息轉發(fā)時不會出現(xiàn)無限循環(huán);消息包內容message content字段長為N個字節(jié),N的取值范圍
。
3.根據權利要求2所述的各組件進程之間統(tǒng)一通信的實現(xiàn)方法,其特征在于所述通用消息的字段中的術語含義是域編號domainId為對系統(tǒng)運行時所在的物理機器或者系統(tǒng)所屬的帳號進行的順序排號,其有效取值范圍為
,其中0和255分別為特殊意義的保留值0表示本地域,255表示所有的域;功能實體類型編號feId是從功能實體的類型角度對功能實體進行的順序排號,所述功能實體是指系統(tǒng)內完成設定功能的組件;功能實體實例編號instanceId是對系統(tǒng)運行時同一個域內的同種類型功能實體的多個進程實例而分別分配的不同的實例編號,屬于域內的資源;因此對于不同域的功能實體實例編號可以相同;域編號、功能實體類型編號和功能實體實例編號的組合在軟件系統(tǒng)范圍內唯一地確定了一個功能實體的實例或進程,由上述三者構成該進程的地址,分發(fā)功能模塊通過該三者的組合將消息送到正確的目的進程;會話號sessionId用于為統(tǒng)一所有消息而將進程間需要完成的所有業(yè)務交互過程都映射為會話過程時,每一個進程內部對它的每一個會話所進行的編號,故會話號是一種本地資源,每一個進程都必須并且只能對自己的會話號進行分配,以確保本進程中任意兩個活動會話的會話號是不相同的;每一次會話則由源端和目的端的功能實體域編號、功能實體類型編號、功能實體實例編號和會話號的組合唯一確定。
4.根據權利要求1所述的各組件進程之間統(tǒng)一通信的實現(xiàn)方法,其特征在于所述通用消息分為下述兩類鏈路管理消息intra_msg_type_management用于鏈路的管理,不需要轉發(fā),其消息類型編號為1;業(yè)務消息intra_msg_type_service用于業(yè)務的運行,可能需要消息分發(fā)功能實體進行轉發(fā),其消息類型編號為2。
5.根據權利要求4所述的各組件進程之間統(tǒng)一通信的實現(xiàn)方法,其特征在于所述鏈路管理消息用于相互連接的兩個進程向對方傳遞本鏈路的狀態(tài)信息,鏈路管理消息的交互是由底層的通信鏈路層維護,不涉及上層模塊;各種鏈路管理消息的編號和功能說明如下登記intra_register消息編號為1,用于向連接對端登記本端的功能實體類型編號和功能實體實例編號,無消息內容,需要對端確認;撤銷intra_retract消息編號為2,用于通知連接對端本連接無效,不再接收新對話,無消息內容,需要對端確認;成功確認intra_acknowledge消息編號為3,用于確認消息處理成功,無消息內容,不需要對端確認;出錯確認intra_error消息編號為4,用于確認消息處理出錯,消息內容為錯誤編號,不需要對端確認;連接保持intra_keepalive消息編號為5,用于連接空閑時發(fā)送此消息,無消息內容,不需要對端確認。
6.根據權利要求4所述的各組件進程之間統(tǒng)一通信的實現(xiàn)方法,其特征在于所述業(yè)務消息是帶有具體內容的消息,用于在各個進程之間傳送業(yè)務數據;各種業(yè)務消息的編號和功能說明如下會話開始消息intra_begin消息編號為1,功能實體實例編號可為空;會話確認消息intra_confirm消息編號為2,消息包內容可為空;會話繼續(xù)消息intra_continue消息編號為3;會話結束消息intra_end消息編號為4,消息包內容可為空;會話中止消息intra_abort消息編號為5,表示會話異常結束,消息包內容為中止原因;單向會話消息intra_uni消息編號為6,功能實體實例編號可為空;會話指示消息intra_notice消息編號為7,用于消息分發(fā)功能實體通知會話兩端轉發(fā)出錯,消息包內容為錯誤原因。
7.根據權利要求1所述的各組件進程之間統(tǒng)一通信的實現(xiàn)方法,其特征在于所述劃分為三層架構的組件的具體功能分別是通信鏈路層,負責維護與其他進程通信的鏈路連接接收鏈路上到達的消息,提交到消息分發(fā)層;從消息分發(fā)層接收由消息處理層下發(fā)的消息,并發(fā)送到鏈路上;實現(xiàn)鏈路連接的方式為TCP socket、FIFO、或共享內存方式的通信連接;消息分發(fā)層,負責進程內部的消息分發(fā)以及到其他進程的消息分發(fā),當進程不具有消息中轉功能時,該層從通信鏈路層接收提交的消息,上報到本地的上層消息處理層作繼續(xù)處理;當進程具有消息中轉功能時,該層從通信鏈路層接收消息,分析該消息的目的地址,如果該消息的目的地址是本進程,則提交到本地消息處理層處理;否則,查找合適的路由,并選擇通信鏈路層的相應鏈路,將消息發(fā)送到正確的鏈路上;業(yè)務消息處理層,負責消息的拆分和組合,其中消息的分片機制對通信鏈路層和消息分發(fā)層是透明的,接收從消息分發(fā)層上報的業(yè)務消息,并對該消息進行處理,再將處理后產生的業(yè)務消息向下交給消息分發(fā)層分發(fā);該層設有能夠對各種不同的通用消息類型進行相應處理的多種功能模塊,并藉此體現(xiàn)不同組件程序的具體功能差異。
8.根據權利要求1所述的各組件進程之間統(tǒng)一通信的實現(xiàn)方法,其特征在于所述路由算法是通過查找路由表來獲得通用消息的路由信息,所述路由表的表項是格式為<目的地址,目的掩碼,下一跳地址,下一跳掩碼>的四元組,其中,目的地址和下一跳地址都表示為domainId.feId.instanceId,即域編號.功能實體類型編號.功能實體實例編號,目的掩碼和下一跳掩碼均指功能實體實例編號instanceId的掩碼。
9.根據權利要求1或8所述的各組件進程之間統(tǒng)一通信的實現(xiàn)方法,其特征在于所述通用消息進行的路由轉發(fā)分為四種類型A、從本進程發(fā)送到其他進程的消息,B、由其他進程發(fā)送到本進程的消息,C、進程內部傳遞的消息,D、經由通用消息分發(fā)組件msgr中轉的消息;其中,A類和D類消息都需要根據目的進程地址使用路由表選路,其操作步驟為(1)保持目的進程地址中的域編號和功能實體類型編號不變,但將目的進程地址中的功能實體實例編號instanceId與四元組中的目的掩碼進行“與”操作,再將計算結果與路由表里每個表項四元組中的目的地址進行比較,如果兩者相等,則選擇該表項四元組中對應的下一跳地址和下一跳掩碼,繼續(xù)執(zhí)行步驟(2)的操作;如果兩者不相等,則丟棄該消息,操作結束;(2)保持該表項四元組中對應的下一跳地址中的域編號.功能實體類型編號不變,但將該表項四元組中對應的下一跳地址中的功能實體實例編號進行如下操作(X∨M)∧(R∨M),即先分別將下一跳地址中標記為X的功能實體實例編號instanceId和標記為M的下一跳掩碼的反M進行“或”操作,將一個標記為R的隨機數和下一跳掩碼M進行“或”操作,再將該兩個操作結果進行“與”操作,最后得到的結果才是真正的下一跳地址。
10.根據權利要求1所述的各組件進程之間統(tǒng)一通信的實現(xiàn)方法,其特征在于所述通用消息在進程間的尋址時,需要遵循下述原則目的域編號domainId和目的功能實體類型編號feId不為零、但目的功能實體實例編號instanceId為零時,由消息分發(fā)功能模塊將該消息轉發(fā)到目的域,然后依據設定的負荷分擔算法在本域內根據目的feId選擇一個正確類型的功能實體實例instanceId進行分發(fā);消息分發(fā)功能模塊對同一條消息的負荷分擔只能實施一次,一旦確定了消息的目的功能實體實例編號instanceId,即將消息頭中的目的地址中的功能實體實例字段填寫成該功能實體實例編號的實際數值;目的domainId、目的feId和目的instanceId都不為零時,消息分發(fā)功能模塊在分發(fā)時不使用設定的負荷分擔機制,而是根據路由表選擇下一跳實例地址;如果沒有滿足條件的下一跳實例地址,則丟棄該消息并報錯。
全文摘要
一種用于大型軟件系統(tǒng)的各組件進程之間統(tǒng)一通信的通用消息總線的實現(xiàn)方法,包括四個步驟(1)設置各組件進程間的通信都必須采用的統(tǒng)一、規(guī)范的通用消息的格式,且以session形式交互消息;(2)將每個組件劃分為具有不同功能的三個階層通信鏈路層、消息分發(fā)層、業(yè)務消息處理層;(3)在系統(tǒng)中設置通用消息分發(fā)組件msgr,該msgr組件專用于分發(fā)各進程間交互的通用消息,并由具有通用消息中轉功能的其它組件進行輔助分發(fā);(4)各組件進程間通信的通用消息按照設定的路由算法進行分發(fā)。本發(fā)明采用統(tǒng)一通信的通用消息總線方法,在各進程之間傳遞的都是通用消息,從而大大簡化各進程間的通信關系,并降低通信復雜度,克服了現(xiàn)有進程間通信的各種缺點。
文檔編號G06F9/54GK101075201SQ20071011794
公開日2007年11月21日 申請日期2007年6月26日 優(yōu)先權日2007年6月26日
發(fā)明者廖建新, 王晶, 王純, 李煒, 周俊峰, 黃健, 朱曉民, 張磊, 徐童, 張樂劍, 沈奇威, 樊利民, 程莉 申請人:北京郵電大學