欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于消息的分布式系統(tǒng)以及在其中通信的方法

文檔序號(hào):7960212閱讀:223來源:國知局
專利名稱:一種基于消息的分布式系統(tǒng)以及在其中通信的方法
技術(shù)領(lǐng)域
本發(fā)明涉及網(wǎng)絡(luò)通信領(lǐng)域,尤其涉及一種基于消息的分布式系統(tǒng),以及在所述系統(tǒng)中利用消息通信的方法。
背景技術(shù)
隨著IP(Internet Protocol,網(wǎng)際協(xié)議)網(wǎng)絡(luò)的廣泛延伸和帶寬不斷增長,網(wǎng)絡(luò)提供了更大的能力,通過網(wǎng)絡(luò)對(duì)系統(tǒng)進(jìn)行分布部署,大大提高了系統(tǒng)的性能和靈活性,分布式軟件系統(tǒng)架構(gòu)是當(dāng)今很多系統(tǒng)的基本特征。分布式作為一個(gè)系統(tǒng)級(jí)的架構(gòu),雖然對(duì)于不同的系統(tǒng)具有不同的考慮,但都有一個(gè)最基本需求,即分布式調(diào)用,具體地說,客戶端和服務(wù)端可以分布在IP網(wǎng)絡(luò)中,并且客戶端和服務(wù)端的程序不必使用相同的編譯環(huán)境和運(yùn)行環(huán)境,如客戶端可以使用java(一種計(jì)算機(jī)語言)編寫,服務(wù)端使用C++(一種計(jì)算機(jī)語言)語言編寫,客戶端可以運(yùn)行在基于Intel(美國英特爾公司)的CPU(中央處理器)的Windows(美國微軟公司生產(chǎn)的“視窗”操作系統(tǒng))環(huán)境,服務(wù)端運(yùn)行在SUN Solaris(美國太陽公司生產(chǎn)的操作系統(tǒng))上。
實(shí)現(xiàn)分布式調(diào)用需要考慮的幾個(gè)關(guān)鍵的因素包括通信模式、對(duì)象解析、編碼方式等。
通信模式對(duì)于比較復(fù)雜的系統(tǒng)各模塊既是服務(wù)端提供服務(wù),同時(shí)也是客戶端使用其他模塊的服務(wù),通信模式是針對(duì)一個(gè)具體的場景,有如下模式遠(yuǎn)程過程調(diào)用—客戶端發(fā)送請(qǐng)求給服務(wù)端,然后等待響應(yīng),即同步通信。
消息傳遞—客戶機(jī)發(fā)送一個(gè)請(qǐng)求,并不期待一個(gè)響應(yīng)。
異步回調(diào)—客戶機(jī)以上述兩種方式之一調(diào)用服務(wù),雙方交換角色,進(jìn)行回調(diào),這種模式可以以前述兩種方式中的任一種構(gòu)建。
對(duì)象解析由于系統(tǒng)模塊的分布式部署,不再在一個(gè)進(jìn)程甚至一個(gè)機(jī)器上,調(diào)用前必須有通信對(duì)象的名稱,這個(gè)名稱應(yīng)該是邏輯上比較獨(dú)立的,系統(tǒng)中保持唯一,不與物理資源綁定,避免在部署發(fā)生變化后需要修改程序,因此一般需要一個(gè)命名服務(wù)提供名字解析服務(wù)。如CORBA(Common Object RequestBroker Architecture,公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu))使用名字(通過命名服務(wù)器)提供對(duì)象定位,DCOM(Distributed Component Object Model,分布式組件對(duì)象模型)使用系統(tǒng)注冊(cè)提供名稱服務(wù),J2EE(J2EE是一個(gè)開放的、基于標(biāo)準(zhǔn)的開發(fā)和部署的平臺(tái))使用JNDI(JNDI,Java Naming and DirectoryInterface,Java命名和目錄接口)提供名字服務(wù)。
編碼方式通信雙方由于不一定是使用相同的編程語言和具有相同的CPU,所以對(duì)字節(jié)序的理解不一樣,如Java都是BigEndian(大端模式、高位優(yōu)先、正向字序、網(wǎng)絡(luò)字序、UNIX字序),C++語言在Intel上是LittleEndian(小端模式、低位優(yōu)先、逆向字序、INTEL字序、NT字序),在PowerPC(一種個(gè)人臺(tái)式計(jì)算機(jī))上是BigEndian;除了字節(jié)序外,結(jié)構(gòu)對(duì)象的內(nèi)存排列(Layout)也不一致。分布式調(diào)用雙方需要有一種一致的編碼方式,常用的編碼方式如AS N.1(Abstract Syntax Normal dot 1,一種使用比較廣泛的數(shù)據(jù)編碼規(guī)范)和CDR(Common Data Representation,公共數(shù)據(jù)表示,CORBA中使用的數(shù)據(jù)編碼方式)。
在現(xiàn)有技術(shù)中,CORBA是很成熟的一種分布式開發(fā)技術(shù)。如圖1所示,基于CORBA開發(fā)步驟通??筛爬?.用IDL(Interface Difinition Language,CORBA中用于描述接口的語言)文件定義客戶端(Client)和服務(wù)端(Server)的應(yīng)用編程接口(API);2.編譯IDL文件,生成客戶端代理(stub)代碼、服務(wù)端骨架(skeleton)代碼;3.在代理和骨架的基礎(chǔ)上分別實(shí)現(xiàn)服務(wù)端和客戶端。
其中,圖中ORB(Object Remote Broker)Core是CORBA里面的對(duì)象遠(yuǎn)程代理核心。
然而,在上述現(xiàn)有的以CORBA作為分布式開發(fā)的技術(shù)中存在如下的缺點(diǎn)1.使用復(fù)雜,學(xué)習(xí)成本高。直接使用CORBA開發(fā),需要學(xué)習(xí)的知識(shí)很多,對(duì)大多數(shù)的C++程序員來說,比較困難。
2.CORBA支持類似C++的調(diào)用方式,實(shí)現(xiàn)一般OO(Object Oriented,面向?qū)ο蟮?系統(tǒng)比較方便,但對(duì)于一些領(lǐng)域,需要并發(fā)處理大量消息,因此,通常不需要復(fù)雜的OO建模,而是需要異步傳遞消息和通知。
3.只支持單一的編碼方式。使用CORBA技術(shù)時(shí),在用戶定義了IDL結(jié)構(gòu)后,自動(dòng)使用CDR編碼,而對(duì)于一些移植系統(tǒng),可能有其他的編碼方式,如ASN.1,這時(shí)需要在IDL和其他編碼方式之間作轉(zhuǎn)換。
4.生成的代碼量大,占用的內(nèi)存和硬盤空間大。對(duì)于一些非服務(wù)器上的應(yīng)用,如嵌入式單板,存儲(chǔ)器容量有限,使用IDL定義接口導(dǎo)致大量的代碼,這些代碼要編譯到系統(tǒng)中,造成目標(biāo)文件很大。
5.無法在支持HA(高可用性)和LB(負(fù)載平衡)等電信要求。使用CORBA技術(shù)時(shí),直接使用IDL定義接口,由于每個(gè)IDL直接編譯成代碼(包括編解碼/通信處理),這些代碼散布在系統(tǒng)各處,而且這些代碼也是用戶不能修改的,用戶無法在一個(gè)地方進(jìn)行統(tǒng)一處理,而HA、LB等高可用性要求系統(tǒng)能在一些點(diǎn)進(jìn)行處理,如入口或出口。

發(fā)明內(nèi)容
本發(fā)明的目的是提供一種基于消息的分布式系統(tǒng),該系統(tǒng)可以降低分布式開發(fā)的難度。本發(fā)明還提出了一種在所述系統(tǒng)中利用消息進(jìn)行通信的方法。
為此,本發(fā)明提供以下技術(shù)方案一種基于消息的分布式系統(tǒng),所述系統(tǒng)包括至少一個(gè)節(jié)點(diǎn),所述節(jié)點(diǎn)包括至少一個(gè)完成特定功能的模塊,所述模塊包括至少一個(gè)服務(wù)接入點(diǎn),用于接收服務(wù)請(qǐng)求消息,并根據(jù)所述服務(wù)請(qǐng)求消息完成所需服務(wù);消息發(fā)送器,用于將服務(wù)請(qǐng)求消息發(fā)送至目的服務(wù)接入點(diǎn),請(qǐng)求所需服務(wù)。
所述服務(wù)接入點(diǎn)具有在所述系統(tǒng)內(nèi)唯一的服務(wù)接入點(diǎn)標(biāo)識(shí);所述消息中包含目的服務(wù)接入點(diǎn)的標(biāo)識(shí)。
所述消息發(fā)送器包括同步消息發(fā)送器,用于將同步消息發(fā)送至目的服務(wù)接入點(diǎn),請(qǐng)求所需服務(wù),并將服務(wù)結(jié)果返回給發(fā)送者;異步消息發(fā)送器,用于將異步消息發(fā)送至目的服務(wù)接入點(diǎn),請(qǐng)求所需服務(wù),但不負(fù)責(zé)將服務(wù)結(jié)果返回給發(fā)送者。
所述服務(wù)接入點(diǎn)包括至少一個(gè)服務(wù)執(zhí)行單元,根據(jù)服務(wù)請(qǐng)求消息完成所需服務(wù);消息接收和調(diào)度單元,接收服務(wù)請(qǐng)求消息,并分發(fā)給相應(yīng)的服務(wù)執(zhí)行單元,將服務(wù)結(jié)果返回給服務(wù)請(qǐng)求方。
所述消息接收和調(diào)度單元具體包括同步消息接收和調(diào)度單元,接收服務(wù)請(qǐng)求方的同步消息,調(diào)用相應(yīng)的服務(wù)執(zhí)行單元完成所需服務(wù),將服務(wù)結(jié)果返回給服務(wù)請(qǐng)求方。
異步消息接收和調(diào)度單元,接收服務(wù)請(qǐng)求方的同步消息,并分發(fā)給相應(yīng)的服務(wù)執(zhí)行單元,待所述服務(wù)執(zhí)行單元完成服務(wù)后,創(chuàng)建新消息,將服務(wù)結(jié)果放在所述新消息中通過消息發(fā)送器發(fā)送給服務(wù)請(qǐng)求方。
所述節(jié)點(diǎn)還包括名字服務(wù)器,用于提供名字服務(wù);所述服務(wù)接入點(diǎn)將該服務(wù)接入點(diǎn)的標(biāo)識(shí)及訪問地址注冊(cè)到所述名字服務(wù)器;所述消息發(fā)送器根據(jù)消息中的目的服務(wù)接入點(diǎn)標(biāo)識(shí)從名字服務(wù)器得到目的服務(wù)接入點(diǎn)的訪問地址,將消息發(fā)送至目的服務(wù)接入點(diǎn)。
所述消息包括消息頭和消息體,所述消息頭中至少包含發(fā)送所述消息的服務(wù)接入點(diǎn)標(biāo)識(shí),以及接收所述消息的服務(wù)接入點(diǎn)標(biāo)識(shí),所述消息體包含有服務(wù)需要的數(shù)據(jù)。
所述服務(wù)接入點(diǎn)標(biāo)識(shí)由節(jié)點(diǎn)號(hào)、模塊號(hào)和服務(wù)接入點(diǎn)號(hào)組成。
所述模塊還設(shè)有一個(gè)備份模塊。
所述模塊還包括服務(wù)接入點(diǎn)列表存儲(chǔ)器,用于存儲(chǔ)所述模塊中的所有服務(wù)接入點(diǎn)。
所述模塊還包括一個(gè)服務(wù)接入點(diǎn)管理單元,用來管理所述模塊中的所有服務(wù)接入點(diǎn)。
本發(fā)明還提供一種在分布式系統(tǒng)中利用消息進(jìn)行通信的方法,用于第一服務(wù)接入點(diǎn)向第二服務(wù)接入點(diǎn)請(qǐng)求服務(wù),所述方法包括以下步驟1)所述第一服務(wù)接入點(diǎn)通過消息發(fā)送器向所述第二服務(wù)接入點(diǎn)發(fā)送消息;
2)所述第二服務(wù)接入點(diǎn)接收消息,執(zhí)行所需服務(wù);3)所述第二服務(wù)接入點(diǎn)返回服務(wù)結(jié)果。
所述消息為同步消息,所述步驟2)具體為所述第二服務(wù)接入點(diǎn)接收消息,調(diào)用相應(yīng)服務(wù)執(zhí)行單元,完成所需服務(wù)。
所述消息為異步消息,所述步驟2)具體為所述第二服務(wù)接入點(diǎn)將所述消息發(fā)送給相應(yīng)的服務(wù)執(zhí)行單元,所述服務(wù)執(zhí)行單元完成所需服務(wù)。
所述步驟3)具體為所述第二服務(wù)接入點(diǎn)創(chuàng)建新的消息,將服務(wù)結(jié)果放入所述新消息中,通過消息發(fā)送器發(fā)送給所述第一服務(wù)接入點(diǎn)。
所述消息包括消息頭和消息體,所述消息頭中至少包含發(fā)送所述消息的服務(wù)接入點(diǎn)標(biāo)識(shí),以及接收所述消息的服務(wù)接入點(diǎn)標(biāo)識(shí),所述消息體包含有服務(wù)需要的數(shù)據(jù)。
所述服務(wù)接入點(diǎn)標(biāo)識(shí)由節(jié)點(diǎn)號(hào)、模塊號(hào)和服務(wù)接入點(diǎn)號(hào)組成。
所述模塊還設(shè)有一個(gè)備份模塊,所述步驟1)具體為所述第一服務(wù)接入點(diǎn)通過消息發(fā)送器向第二服務(wù)接入點(diǎn)請(qǐng)求服務(wù),所述消息發(fā)送器向位于所有模塊的所述第二服務(wù)接入點(diǎn)分別發(fā)送請(qǐng)求所述服務(wù)的消息。
所述步驟3)具體為位于非備份模塊的所述第二服務(wù)接入點(diǎn)返回服務(wù)結(jié)果。
由于本發(fā)明的系統(tǒng)采用了節(jié)點(diǎn)-模塊-服務(wù)接入點(diǎn)的分層結(jié)構(gòu),發(fā)送消息統(tǒng)一使用消息發(fā)送器,接收消息統(tǒng)一使用服務(wù)點(diǎn)接入單元,用戶不用關(guān)心系統(tǒng)的具體信息,只需要知道對(duì)端的接入服務(wù)點(diǎn)標(biāo)識(shí)就能夠完成在分布式環(huán)境下的通信,簡化了分布式開發(fā)的步驟,降低了分布式開發(fā)的難度,提高了系統(tǒng)的可靠性,提高了系統(tǒng)的可擴(kuò)充性,例如可以通過統(tǒng)一的消息處理支持統(tǒng)一的消息日志,實(shí)現(xiàn)HA方案。


圖1是基于CORBA的通常開發(fā)步驟示意圖;圖2是本發(fā)明中所述系統(tǒng)的結(jié)構(gòu)示意圖;
圖3是節(jié)點(diǎn)級(jí)聯(lián)過程的流程圖;圖4是主節(jié)點(diǎn)與一個(gè)從節(jié)點(diǎn)級(jí)聯(lián)時(shí)的名字服務(wù)結(jié)構(gòu)示意圖;圖5是級(jí)聯(lián)后主節(jié)點(diǎn)上看到的名字服務(wù)的目錄樹示意圖;圖6是級(jí)聯(lián)后從節(jié)點(diǎn)上看到名字服務(wù)的目錄樹示意圖;圖7是根據(jù)本發(fā)明優(yōu)選實(shí)施方案中節(jié)點(diǎn)的結(jié)構(gòu)示意圖;圖8是用C++語言實(shí)現(xiàn)一個(gè)模塊實(shí)例的結(jié)構(gòu)示意圖;圖9是同步調(diào)用流程示意圖;圖10是異步調(diào)用流程示意圖;圖11是本系統(tǒng)在HA方案中應(yīng)用的示意圖。
具體實(shí)施例方式
下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明,但不作為對(duì)本發(fā)明的限定。
圖2是根據(jù)本發(fā)明優(yōu)選實(shí)施方案的分布式系統(tǒng)的結(jié)構(gòu)示意圖。如圖2所示,在系統(tǒng)內(nèi)分布有多個(gè)節(jié)點(diǎn),在節(jié)點(diǎn)中包括多個(gè)完成特定功能的模塊。
本發(fā)明所述的節(jié)點(diǎn)分布在廣域網(wǎng)內(nèi)或局域網(wǎng)內(nèi)。在圖2中,節(jié)點(diǎn)1為主節(jié)點(diǎn),其他節(jié)點(diǎn)是從節(jié)點(diǎn),主節(jié)點(diǎn)是在邏輯上定義的,例如可以根據(jù)實(shí)際需要把其中一個(gè)獨(dú)立的節(jié)點(diǎn)設(shè)置成主節(jié)點(diǎn),其余節(jié)點(diǎn)設(shè)置成從節(jié)點(diǎn)。從節(jié)點(diǎn)和主節(jié)點(diǎn)通過級(jí)聯(lián)的方式聯(lián)合,這將在本文的下面進(jìn)行詳細(xì)描述。每個(gè)節(jié)點(diǎn)都有一個(gè)唯一的“節(jié)點(diǎn)號(hào)”,以和其他節(jié)點(diǎn)相區(qū)別。每個(gè)節(jié)點(diǎn)都包括一個(gè)名字服務(wù)器模塊,所有從節(jié)點(diǎn)都注冊(cè)到主節(jié)點(diǎn)的名字服務(wù)器模塊上,節(jié)點(diǎn)間通過名字服務(wù)器模塊級(jí)聯(lián)訪問。這將在下面進(jìn)行詳細(xì)描述。
圖3描述了從節(jié)點(diǎn)的名字服務(wù)級(jí)聯(lián)到主節(jié)點(diǎn)名字服務(wù)的過程。
如圖3所示,在級(jí)聯(lián)前,所有節(jié)點(diǎn)的名字服務(wù)器下都只有一個(gè)根目錄節(jié)點(diǎn)Node0(節(jié)點(diǎn)0),級(jí)聯(lián)過程可概括為步驟101在主節(jié)點(diǎn)名字服務(wù)的根下面創(chuàng)建一個(gè)目錄節(jié)點(diǎn)Node1(節(jié)點(diǎn)1),并連接到自己的Node0;步驟102在主節(jié)點(diǎn)名字服務(wù)的根下面創(chuàng)建一個(gè)目錄節(jié)點(diǎn)Node2(節(jié)點(diǎn)2),并連接到第一個(gè)從節(jié)點(diǎn)的Node0;步驟103在從節(jié)點(diǎn)名字服務(wù)的根下創(chuàng)建一個(gè)目錄節(jié)點(diǎn)Primary(主目錄節(jié)點(diǎn)),連接到主節(jié)點(diǎn)的根上;重復(fù)步驟102、103兩步增加新的從節(jié)點(diǎn),從節(jié)點(diǎn)號(hào)依次增加,如Node3、Node4、Node5......。
圖4是主節(jié)點(diǎn)與一個(gè)從節(jié)點(diǎn)級(jí)聯(lián)時(shí)的名字服務(wù)的結(jié)構(gòu)示意圖。
本領(lǐng)域的技術(shù)人員通過上面的描述和公知的常識(shí),應(yīng)該理解創(chuàng)建節(jié)點(diǎn)、目錄節(jié)點(diǎn)以及這些節(jié)點(diǎn)如何通過名字服務(wù)器模塊聯(lián)合在一起的具體實(shí)現(xiàn)過程,因此,在這里不再贅述。
圖5是級(jí)聯(lián)后,從主節(jié)點(diǎn)的名字服務(wù)看到的名字服務(wù)目錄樹的示意圖。在圖6中,主節(jié)點(diǎn)名字服務(wù)目錄樹的根(Root)下有內(nèi)容相同的Node0和Node1,Node1下是主節(jié)點(diǎn)的所有模塊名目錄,模塊名目錄下面是該模塊所有服務(wù)接入點(diǎn)(SAP)的目錄(在下文中將對(duì)SAP詳細(xì)描述)。其他節(jié)點(diǎn)的目錄連接在主節(jié)點(diǎn)名字服務(wù)目錄樹的根下,其結(jié)構(gòu)與Node1相同,如圖中的Node2、Node3。
圖6是級(jí)聯(lián)后,在從節(jié)點(diǎn)上的名字服務(wù)看到的名字服務(wù)目錄樹的示意圖。該從節(jié)點(diǎn)的Root目錄下有一個(gè)Node0,Node0下是該從節(jié)點(diǎn)的所有模塊名目錄,模塊名目錄下面是該模塊所有SAP的目錄。該從節(jié)點(diǎn)的根目錄下還有一個(gè)Primary節(jié)點(diǎn),在Primary節(jié)點(diǎn)下面連接著主節(jié)點(diǎn)和其他從節(jié)點(diǎn)的根目錄。
圖7是根據(jù)本發(fā)明優(yōu)選實(shí)施方式的節(jié)點(diǎn)的結(jié)構(gòu)示意圖。圖中,1、服務(wù)接入點(diǎn),2消息發(fā)送器。如圖7和圖2所示,在該優(yōu)選的實(shí)施方式中,各個(gè)節(jié)點(diǎn)中包括一個(gè)名字服務(wù)器以及多個(gè)完成特定功能的模塊。每個(gè)模塊都包括一個(gè)消息發(fā)送器2和至少一個(gè)服務(wù)接入點(diǎn)1。
在該實(shí)施方式中,消息發(fā)送器包括同步消息發(fā)送器和異步消息發(fā)送器。SAP則包括至少一個(gè)服務(wù)執(zhí)行單元和消息接收和調(diào)度單元。消息接收和調(diào)度單元包括同步消息接收和調(diào)度單元。
SAP是模塊對(duì)外的接口,都有一個(gè)在系統(tǒng)內(nèi)唯一的SAP標(biāo)識(shí)。SAP標(biāo)識(shí)是對(duì)其進(jìn)行訪問的外部標(biāo)識(shí)。SAP標(biāo)識(shí)可以是系統(tǒng)內(nèi)唯一的全局分層地址,具體地說,分層地址包括節(jié)點(diǎn)號(hào)、模塊號(hào)、SAP號(hào)。模塊的所有SAP都通過SAP標(biāo)識(shí)注冊(cè)到與其相對(duì)應(yīng)的節(jié)點(diǎn)的名字服務(wù)器上。例如,在圖6中,各模塊以及其包含的SAP都掛在相應(yīng)的Node0下面。此外,在名字服務(wù)模塊上還記錄了實(shí)際要訪問地址(如物理地址)。在具體訪問時(shí),例如在訪問時(shí)通過名字服務(wù)根據(jù)服務(wù)SAP的分層地址,得出它的實(shí)際訪問地址,然后根據(jù)實(shí)際訪問地址訪問。
在模塊中,SAP標(biāo)識(shí)一般保存在特定位置,例如在本發(fā)明的一個(gè)實(shí)施方式中,SAP標(biāo)識(shí)保存在模塊中的一個(gè)專用的SAP列表存儲(chǔ)器中。在系統(tǒng)初始啟動(dòng)時(shí),模塊會(huì)訪問SAP列表存儲(chǔ)器,并根據(jù)SAP存儲(chǔ)器中的記錄,對(duì)記錄的SAP進(jìn)行初始化。模塊在關(guān)閉時(shí)會(huì)根據(jù)SAP存儲(chǔ)器中的記錄注銷這些SAP。當(dāng)然,本發(fā)明并不局限于此,本領(lǐng)域的技術(shù)人員應(yīng)該理解還具有許多其他的存儲(chǔ)方法。
同步消息發(fā)送器發(fā)送同步消息至目的SAP,請(qǐng)求所需服務(wù),并將服務(wù)結(jié)果返回給發(fā)送者。異步消息發(fā)送器,發(fā)送異步消息至目的SAP,請(qǐng)求所需服務(wù),但不負(fù)責(zé)將服務(wù)結(jié)果返回給發(fā)送者。同步消息接收單元接收服務(wù)請(qǐng)求方的同步消息,調(diào)用相應(yīng)的服務(wù)執(zhí)行單元完成所需服務(wù),將服務(wù)結(jié)果返回給服務(wù)請(qǐng)求方。異步消息接收和調(diào)度單元,接收服務(wù)請(qǐng)求方的同步消息,并分發(fā)給相應(yīng)的服務(wù)執(zhí)行單元,待所述服務(wù)執(zhí)行單元完成服務(wù)后,創(chuàng)建一個(gè)新的消息,將服務(wù)結(jié)果放在新的消息中通過消息發(fā)送器發(fā)送給服務(wù)請(qǐng)求方。
所述服務(wù)接入點(diǎn)在所述系統(tǒng)內(nèi)具有唯一的全局分層地址都以其全局分層地址注冊(cè)到名字服務(wù)器模塊,消息發(fā)送器根據(jù)注冊(cè)到名字服務(wù)器上的全局分層地址向服務(wù)接入點(diǎn)發(fā)送消息。由于采用了全局分層地址,不同節(jié)點(diǎn)中的模塊也可以通過上述相同的方式互相進(jìn)行訪問。
在該實(shí)施方式中,同步消息和異步消息都包括消息頭和消息體,消息頭中至少包含客戶端模塊的地址、服務(wù)端地址以及服務(wù)端模塊的SAP號(hào),消息體則封裝調(diào)用數(shù)據(jù)。
在下文中,為了便于描述,將發(fā)送消息的模塊稱為客戶端模塊,將接受消息的模塊稱為服務(wù)端模塊。各模塊既可以是客戶端模塊,也可以是服務(wù)端模塊。
在進(jìn)行同步調(diào)用時(shí),客戶端模塊的消息發(fā)送器(具體地說,是通過同步消息發(fā)送器)向服務(wù)端模塊的SAP發(fā)送同步消息。服務(wù)端模塊通過其具有的SAP(具體地說,是接收和調(diào)度單元的同步接收和調(diào)度單元)接收該同步消息,并將所接收到的同步消息發(fā)送到相應(yīng)的執(zhí)行單元,執(zhí)行單元根據(jù)接收到的同步消息的消息體中的具體內(nèi)容來完成相應(yīng)的功能操作,并將操作的結(jié)果返回到客戶端模塊。在這里返回的結(jié)果同樣是由客戶端模塊的SAP的接收和調(diào)度單元來接收的。在進(jìn)行異步調(diào)用時(shí),客戶端模塊的消息發(fā)送器(具體地說,是通過異步消息發(fā)送器)向服務(wù)端模塊的SAP發(fā)送異步消息,同樣,服務(wù)端模塊通過其具有的異步消息接收和調(diào)度單元接收該異步消息,并將所接收到的異步消息發(fā)送到相應(yīng)的執(zhí)行單元,該執(zhí)行單元根據(jù)接收到的異步消息體中的具體內(nèi)容來完成相應(yīng)的功能操作。但是,服務(wù)端模塊在完成相應(yīng)的操作后,并不會(huì)給客戶端模塊返回操作結(jié)果。但是,服務(wù)端的SAP會(huì)從接收到的異步消息中獲取客戶端源地址,并對(duì)其進(jìn)行保存。之后,客戶端的SAP在任意需要的時(shí)候,可以創(chuàng)建新的消息,并將服務(wù)端模塊的服務(wù)結(jié)果放入新的消息中,根據(jù)該客戶端的源地址,向客戶端模塊返回操作的結(jié)果。在這里,在調(diào)用過程中所使用的數(shù)據(jù)可以是二進(jìn)制數(shù)據(jù),并可以使用分布式開發(fā)中的各種編碼方式,例如使用CDR或ASN.1編碼方式。
此外,各模塊還可以包括一個(gè)管理SAP的單元,用來完成一些所有SAP的共性的管理功能。
在本發(fā)明的另外一個(gè)優(yōu)選實(shí)施方式中,在節(jié)點(diǎn)中還可以設(shè)有一個(gè)備份模塊,備份模塊同原始模塊完全相同,備份模塊的模塊號(hào)也同該模塊的相同。在該實(shí)施方式中,上述分層地址還可包括一個(gè)“群內(nèi)號(hào)”,用于區(qū)分原始模塊和備份模塊。
下面描述一種在根據(jù)本發(fā)明上述實(shí)施方式描述的分布式系統(tǒng)中利用消息進(jìn)行通信的方法。
首先,上述節(jié)點(diǎn)中的一個(gè)(在這里稱為第一節(jié)點(diǎn))的一個(gè)模塊(在這里稱為第一模塊)通過與其對(duì)應(yīng)的消息發(fā)送器向另外一個(gè)節(jié)點(diǎn)(在這里稱為第二節(jié)點(diǎn))的一個(gè)模塊(在這里稱為第二模塊)發(fā)送消息。第二模塊通過與其對(duì)應(yīng)的SAP接收該消息,并根據(jù)所接受的消息是同步消息還是異步消息來執(zhí)行相應(yīng)操作。其中在第一模塊向第二模塊發(fā)送的消息為同步消息時(shí),第二模塊向第一模塊返回操作結(jié)果,在第一模塊向第二模塊發(fā)送的消息為異步消息時(shí),第二模塊根據(jù)所述消息執(zhí)行相應(yīng)操作,但不向第一模塊返回操作結(jié)果,而僅保存第一模塊的地址。在需要的時(shí)候,第二模塊可以根據(jù)包括的第一模塊的地址向第一模塊返回操作結(jié)果。對(duì)于具體的操作過程可參照上文中的描述。
在這里雖然列舉了兩個(gè)節(jié)點(diǎn)之間的兩個(gè)模塊之間進(jìn)行通信的方法,但是本領(lǐng)域的技術(shù)人員應(yīng)該認(rèn)識(shí)到在同一節(jié)點(diǎn)中的兩個(gè)不同模塊也可以進(jìn)行上述相同的操作。此外,對(duì)于上述操作的具體原理和細(xì)節(jié)已經(jīng)在前面描述本發(fā)明優(yōu)選實(shí)施方式的分布式系統(tǒng)時(shí)進(jìn)行了詳細(xì)的論述,因此,在這里不再贅述。
為了使本領(lǐng)域的技術(shù)人員更加完整地理解本發(fā)明,下面以C++語言編程為例來詳細(xì)描述實(shí)現(xiàn)本發(fā)明優(yōu)選實(shí)施方式的模塊的細(xì)節(jié)。
為了使本發(fā)明的技術(shù)人員更容易地理解本發(fā)明,下面將以C++語言編程為例以軟件實(shí)現(xiàn)的形式來說明本發(fā)明實(shí)施方式的一個(gè)示例。圖8是用C++語言編程實(shí)現(xiàn)一個(gè)模塊的實(shí)例的結(jié)構(gòu)示意圖。在圖中,iMAP_Lem_Module表示模塊的類名稱,iMAP_Msg_Utility表示消息發(fā)送器的類名稱,iMAP_Sap_Cache_Mgr和Sap_Entry分別表示服務(wù)接入點(diǎn)緩存管理器的類名稱和服務(wù)接入點(diǎn)列表的類名稱。此外,iMAP_Lem_Sap_Impl和iMAP_Admin_Sap_Impl分別表示服務(wù)接入點(diǎn)實(shí)現(xiàn)基類的類名稱和管理服務(wù)接入點(diǎn)實(shí)現(xiàn)的類名稱。圖中的連線表示了各類之間的調(diào)用關(guān)系。圖中的英文是訪問時(shí)調(diào)用的名稱,沒有特別的含義,也可以用其他的英文名稱替代。
其中,各模塊可以通過包含有進(jìn)程、動(dòng)態(tài)庫或其他形式的單元來實(shí)現(xiàn),如前所述,每個(gè)模塊都有一個(gè)唯一的“模塊號(hào)”,用于和節(jié)點(diǎn)內(nèi)其他模塊相區(qū)別。這些模塊作為SAP的容器完成模塊全局的初始化和SAP的初始化。模塊主體通過消息發(fā)送器向其他模塊的SAP發(fā)送消息來訪問其他模塊。如上所述,服務(wù)接入點(diǎn)緩存管理器由消息發(fā)送器使用。服務(wù)接入點(diǎn)列表用于存儲(chǔ)該模塊中所有的SAP地址,服務(wù)接入點(diǎn)列表在模塊初始化時(shí)被初始化。管理服務(wù)接入點(diǎn)實(shí)現(xiàn)類,可以完成一些所有SAP的共性的管理功能。
SAP從iMAP_Lem)_Sap_Impl派生。SAP提供模塊對(duì)外接口的實(shí)體,SAP有一個(gè)唯一的“SAP號(hào)”,和本模塊的其他SAP相區(qū)別。SAP實(shí)現(xiàn)一個(gè)CORBA接口,并注冊(cè)到名字服務(wù)器,使用[節(jié)點(diǎn)號(hào)][模塊號(hào)][SAP號(hào)]來作為該SAP的外部標(biāo)識(shí)(名字)。
SAP實(shí)現(xiàn)的CORBA接口為一個(gè)通用的接口,而應(yīng)用層的SAP一般會(huì)提供多個(gè)功能,每個(gè)功能用一個(gè)成員函數(shù)實(shí)現(xiàn)。應(yīng)用定義成員函數(shù),同時(shí)定義一個(gè)分發(fā)ID(分發(fā)碼)。iMAP_Lem_Sap_Impl通過分發(fā)ID查找和調(diào)用分發(fā)成員函數(shù)。成員函數(shù)使用宏定義。
上述模塊類和SAP類封裝了服務(wù)端的開發(fā),消息發(fā)送器提供了客戶端的使用,客戶端使用這個(gè)類對(duì)象發(fā)送同步或異步消息。
模塊類和SAP類中都有獲得iMAP_Msg_Utility實(shí)例的函數(shù)。消息發(fā)送器的關(guān)鍵是SAP緩存管理器iMAP_Sap_Cache_Mgr,該類提供SAP的CORBA對(duì)象的緩存。這個(gè)類的核心是一個(gè)SAP的緩存數(shù)組。
從上述內(nèi)容不難看出,本實(shí)例中的技術(shù)方案簡化了分布式開發(fā)的步驟,降低了分布式開發(fā)的難度,由于iMAP_Lem_Module封裝了CORBA對(duì)象的創(chuàng)建和注冊(cè)、注銷,用戶只要專注于SAP的實(shí)現(xiàn);SAP只是一個(gè)普通的C++類,從iMAP_Lem_Sap_Impl派生,用戶只需要定義分發(fā)碼和實(shí)現(xiàn)成員函數(shù),而不需要定義和實(shí)現(xiàn)任何CORBA接口。而發(fā)送消息統(tǒng)一使用iMAP_Msg_Utility類,用戶也不用關(guān)心對(duì)端的CORBA對(duì)象和名字服務(wù)器,只需要知道對(duì)端的SAP標(biāo)識(shí)。
本實(shí)例中的方案提供了更好的擴(kuò)充性和可靠性,由于發(fā)送消息統(tǒng)一在iMAP_Msg_Utility中實(shí)現(xiàn),消息接受統(tǒng)一在iMAP_Lem_Sap_Impl中,消息有統(tǒng)一的消息頭,可以對(duì)消息進(jìn)行一些統(tǒng)一的處理,進(jìn)行一些AOP(AspectOriented Programing,面向方面的編程),如統(tǒng)一記錄日志。由于消息統(tǒng)一入口、出口和消息頭,可以統(tǒng)一記錄運(yùn)行日志。
此外,如果直接使用CORBA開發(fā),對(duì)每個(gè)接口定義一個(gè)IDL,然后編譯成stub(代理)和skeleton(骨架),這些代碼量很大,一個(gè)簡單的接口可能編譯出1000行以上代碼,造成系統(tǒng)很龐大,在本實(shí)施例中,只有一個(gè)系統(tǒng)預(yù)定義的CORBA接口,新增的功能通過用戶派生類實(shí)現(xiàn)自己的業(yè)務(wù)邏輯,沒有額外的代碼,系統(tǒng)的大小可以控制,在一些嵌入式的系統(tǒng)由于內(nèi)存受限制,可以通過本發(fā)明提供的方案實(shí)現(xiàn)很好的分布式特性。
上述實(shí)例中,可以使用ORB(CORBA里面的對(duì)象遠(yuǎn)程代理)進(jìn)行底層的通信承載,但在本發(fā)明的系統(tǒng)中ORB不是必須的,也可以使用其他方式作為通信的承載。包括但不限于ACE Reactor/EventHandler(ACE Reactor,Adaptive Communication Envionment Reactor/EventHandler,自適應(yīng)通信環(huán)境反應(yīng)器/事件處理器;是ACE里面的一個(gè)設(shè)計(jì)模式,對(duì)Socket-即套接字的一種C++封裝,ACE是一套開源代碼。);ICE(Internet CommunicationEnvironment,因特網(wǎng)通信環(huán)境,也是一套開源代碼,是CORBA的簡化版本);Socket(套接字,是針對(duì)IP通信的最廣泛使用的一套編程接口)等,都可以實(shí)現(xiàn)本發(fā)明的系統(tǒng)。
圖9表示本方案的一個(gè)同步調(diào)用的過程。下面參照?qǐng)D8和圖9詳細(xì)描述本發(fā)明一個(gè)實(shí)施方式的同步調(diào)用過程,其步驟如下步驟901Client(客戶端,即調(diào)用者)使用消息發(fā)送器(iMAP_Msg_Utility)發(fā)送同步消息(Send_sync_msg,消息發(fā)送器提供的接口函數(shù));步驟902iMAP_Msg_Utility對(duì)Server(服務(wù)端)的iMAP_Lem_Servant(侍服類)執(zhí)行同步調(diào)用(InvokeSnyc,同步調(diào)用,底層CORBA接口調(diào)用);步驟903iMAP_Lem_Servant對(duì)iMAP_Lem_Sap_Impl執(zhí)行同步調(diào)用(iMAP_Lem_Servant實(shí)際和iMAP_Lem_Sap_Impl可以是一個(gè)類,分成兩個(gè)僅僅是一種實(shí)現(xiàn)上的解耦方法,可以看成是一個(gè),前者僅起一個(gè)代理作用);步驟904iMAP_Lem_Sap_Impl在映射中查找分發(fā)函數(shù)(find_map,分發(fā)函數(shù),是服務(wù)接入點(diǎn)類的一個(gè)成員函數(shù)),服務(wù)接入點(diǎn)根據(jù)消息頭中的分發(fā)碼,找到分發(fā)函數(shù);步驟905iMAP_Lem_Sap_Impl執(zhí)行分發(fā)函數(shù);步驟906iMAP_Lem_Sap_Impl同步調(diào)用結(jié)束,將該調(diào)用的輸出參數(shù)和返回值返回給iMAP_Lem_Servant;步驟907iMAP_Lem_Servant同步調(diào)用結(jié)束,將該調(diào)用的輸出參數(shù)和返回值返回給iMAP_Msg_Utility(即Send_sync_msg函數(shù)的輸出參數(shù)和返回值);步驟908iMAP_Msg_Utility同步消息結(jié)束,Client獲得調(diào)用結(jié)果。
圖10表示了本方案的一個(gè)異步調(diào)用的過程實(shí)例,下面參照?qǐng)D8和圖10詳細(xì)描述本發(fā)明一個(gè)實(shí)施方式的異步調(diào)用過程,其步驟如下步驟1001Client(客戶端,即調(diào)用者)使用消息發(fā)送器(iMAP_Msg_Utility)發(fā)送異步消息(send_async_msg,消息發(fā)送器提供的接口函數(shù));步驟1002iMAP_Msg_Utility對(duì)Server(服務(wù)端)的iMAP_Lem_Servant(侍服類)執(zhí)行異步調(diào)用(InvokeAsync,異步調(diào)用,底層CORBA接口調(diào)用);步驟1003iMAP_Lem_Servant對(duì)iMAP_Lem_Sap_Impl執(zhí)行異步調(diào)用;步驟1004iMAP_Lem_Sap_Impl在映射中查找分發(fā)函數(shù);步驟1005iMAP_Lem_Sap_Impl不執(zhí)行分發(fā)函數(shù),把調(diào)用打包放進(jìn)隊(duì)列。打包放進(jìn)隊(duì)列過程是把找到的分發(fā)函數(shù)指針、異步調(diào)用的消息頭和消息體放在一個(gè)數(shù)據(jù)結(jié)構(gòu)里面,然后把這個(gè)結(jié)構(gòu)放進(jìn)一個(gè)隊(duì)列;步驟1006iMAP_Lem_Sap_Impl異步調(diào)用結(jié)束,將返回結(jié)果(不帶有該調(diào)用的輸出參數(shù)和返回值)返回給iMAP_Lem_Servant;步驟1007iMAP_Lem_Servant異步調(diào)用結(jié)束,將返回結(jié)果(不帶有該調(diào)用的輸出參數(shù)和返回值)返回給iMAP_Msg_Utility;步驟1008iMAP_Msg_Utility異步消息結(jié)束,將返回結(jié)果返回給Client。
步驟1009iMAP_Lem_Sap_Impl通過Svc(線程函數(shù))論詢上述隊(duì)列,如果隊(duì)列不為空,則取出隊(duì)列的內(nèi)容(分發(fā)函數(shù)指針、消息頭、消息體),通過分發(fā)函數(shù)指針,執(zhí)行該分發(fā)函數(shù),執(zhí)行時(shí)消息頭、消息體作為分發(fā)函數(shù)的參數(shù)傳入。
步驟1010Svc(線程函數(shù))獲得步驟1009中分發(fā)函數(shù)執(zhí)行的結(jié)果,結(jié)果包括兩部分函數(shù)返回值,函數(shù)輸出參數(shù)。
步驟1011Svc使用Server(服務(wù)端)的iMAP_Msg_Utility的異步函數(shù)(send_async_msg)給Client發(fā)送結(jié)果(返回值填在消息頭中,輸出參數(shù)作為消息體);Client端實(shí)際也是在一個(gè)iMAP_Lem_Sap_Impl的實(shí)現(xiàn)里面處理步驟1011的結(jié)果。
此處還需要規(guī)定一個(gè)特殊值比如發(fā)函數(shù)如果返回空值(DISP VOID),表示不需要Svc函數(shù)再執(zhí)行步驟1011,將返回空值作為一個(gè)特殊定義,分發(fā)函數(shù)的其他返回值不能使用這個(gè)值。
當(dāng)Client的iMAP_Lem_Sap_Impl在收到Server的iMAP_Msg_Utility發(fā)送的消息后,Client端的iMAP_Lem_Sap_Impl的分發(fā)函數(shù)會(huì)返回空值,從而避免形成一個(gè)死循環(huán)的消息發(fā)送。
圖11表示本方案的一種在HA上的應(yīng)用實(shí)例。如圖中所示,在HA方式中,模塊有兩個(gè)運(yùn)行實(shí)例,一個(gè)是主(Active),一個(gè)是備(Standby),這兩個(gè)實(shí)例的節(jié)點(diǎn)號(hào)、模塊號(hào)都一樣,但兩個(gè)的“群內(nèi)號(hào)”不一樣,如,一個(gè)是0一個(gè)是1。對(duì)于調(diào)用者,他只看到節(jié)點(diǎn)號(hào)、模塊號(hào)、SAP號(hào),因此HA對(duì)于調(diào)用者是透明的。調(diào)用者把目的節(jié)點(diǎn)號(hào)、模塊號(hào)、SAP號(hào)傳給消息發(fā)送器,后者在調(diào)用時(shí)中查詢這兩個(gè)實(shí)例的狀態(tài),如果發(fā)現(xiàn)一個(gè)是主,一個(gè)是備,則給主和備實(shí)例同時(shí)發(fā)送(即同時(shí)調(diào)用主和備實(shí)例的SAP的CORBA函數(shù)),這樣實(shí)現(xiàn)復(fù)制功能(Duplication function)。
這是實(shí)現(xiàn)雙機(jī)熱備份的一種機(jī)制,也叫做并發(fā)選收。即發(fā)送的時(shí)候給主備對(duì)象都發(fā)送,但主、備對(duì)象處理后,只有主的返回消息發(fā)出來(如果兩個(gè)的消息都發(fā)出來就會(huì)造成混亂),而備的消息不發(fā)出來,如圖中虛線部分,這樣實(shí)現(xiàn)選擇功能(selection function)。
如此,可以保證在主、備對(duì)象中,如果有一個(gè)死了,另外一個(gè)還能不中斷地進(jìn)行處理。比如當(dāng)主對(duì)象死了,這時(shí)原先備的對(duì)象變成了主對(duì)象,可以發(fā)送消息,而原先的主對(duì)象變成了備對(duì)象。
主、備作為整體來講,始終有一個(gè)輸入和一個(gè)輸出。輸入和輸出包括任何內(nèi)容,當(dāng)對(duì)應(yīng)文件時(shí),輸入就是讀文件,輸出就是寫文件;當(dāng)對(duì)應(yīng)數(shù)據(jù)庫時(shí),輸入就是查詢,輸出就是增刪改。
以上所述的實(shí)施例,只是本發(fā)明較優(yōu)選的具體實(shí)施方式
的一種,本領(lǐng)域的技術(shù)人員在本發(fā)明技術(shù)的方案范圍內(nèi)進(jìn)行的通常變化和替換,都應(yīng)包含在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種基于消息的分布式系統(tǒng),其特征在于,所述系統(tǒng)包括至少一個(gè)節(jié)點(diǎn),所述節(jié)點(diǎn)包括至少一個(gè)完成特定功能的模塊,所述模塊包括至少一個(gè)服務(wù)接入點(diǎn),用于接收服務(wù)請(qǐng)求消息,并根據(jù)所述服務(wù)請(qǐng)求消息完成所需服務(wù);消息發(fā)送器,用于將服務(wù)請(qǐng)求消息發(fā)送至目的服務(wù)接入點(diǎn),請(qǐng)求所需服務(wù)。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述服務(wù)接入點(diǎn)具有在所述系統(tǒng)內(nèi)唯一的服務(wù)接入點(diǎn)標(biāo)識(shí);所述消息中包含目的服務(wù)接入點(diǎn)的標(biāo)識(shí)。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述消息發(fā)送器包括同步消息發(fā)送器,用于將同步消息發(fā)送至目的服務(wù)接入點(diǎn),請(qǐng)求所需服務(wù),并將服務(wù)結(jié)果返回給發(fā)送者;異步消息發(fā)送器,用于將異步消息發(fā)送至目的服務(wù)接入點(diǎn),請(qǐng)求所需服務(wù),但不負(fù)責(zé)將服務(wù)結(jié)果返回給發(fā)送者。
4.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述服務(wù)接入點(diǎn)包括至少一個(gè)服務(wù)執(zhí)行單元,根據(jù)服務(wù)請(qǐng)求消息完成所需服務(wù);消息接收和調(diào)度單元,接收服務(wù)請(qǐng)求消息,并分發(fā)給相應(yīng)的服務(wù)執(zhí)行單元,將服務(wù)結(jié)果返回給服務(wù)請(qǐng)求方。
5.如權(quán)利要求4所述的系統(tǒng),其特征在于,所述消息接收和調(diào)度單元具體包括同步消息接收和調(diào)度單元,接收服務(wù)請(qǐng)求方的同步消息,調(diào)用相應(yīng)的服務(wù)執(zhí)行單元完成所需服務(wù),將服務(wù)結(jié)果返回給服務(wù)請(qǐng)求方。異步消息接收和調(diào)度單元,接收服務(wù)請(qǐng)求方的同步消息,并分發(fā)給相應(yīng)的服務(wù)執(zhí)行單元,待所述服務(wù)執(zhí)行單元完成服務(wù)后,創(chuàng)建新消息,將服務(wù)結(jié)果放在所述新消息中通過消息發(fā)送器發(fā)送給服務(wù)請(qǐng)求方。
6.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述節(jié)點(diǎn)還包括名字服務(wù)器,用于提供名字服務(wù);所述服務(wù)接入點(diǎn)將該服務(wù)接入點(diǎn)的標(biāo)識(shí)及訪問地址注冊(cè)到所述名字服務(wù)器;所述消息發(fā)送器根據(jù)消息中的目的服務(wù)接入點(diǎn)標(biāo)識(shí)從名字服務(wù)器得到目的服務(wù)接入點(diǎn)的訪問地址,將消息發(fā)送至目的服務(wù)接入點(diǎn)。
7.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述消息包括消息頭和消息體,所述消息頭中至少包含發(fā)送所述消息的服務(wù)接入點(diǎn)標(biāo)識(shí),以及接收所述消息的服務(wù)接入點(diǎn)標(biāo)識(shí),所述消息體包含有服務(wù)需要的數(shù)據(jù)。
8.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述服務(wù)接入點(diǎn)標(biāo)識(shí)由節(jié)點(diǎn)號(hào)、模塊號(hào)和服務(wù)接入點(diǎn)號(hào)組成。
9.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述模塊還設(shè)有一個(gè)備份模塊。
10.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述模塊還包括服務(wù)接入點(diǎn)列表存儲(chǔ)器,用于存儲(chǔ)所述模塊中的所有服務(wù)接入點(diǎn)。
11.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述模塊還包括一個(gè)服務(wù)接入點(diǎn)管理單元,用來管理所述模塊中的所有服務(wù)接入點(diǎn)。
12.一種在分布式系統(tǒng)中利用消息進(jìn)行通信的方法,用于第一服務(wù)接入點(diǎn)向第二服務(wù)接入點(diǎn)請(qǐng)求服務(wù),其特征在于,所述方法包括以下步驟1)所述第一服務(wù)接入點(diǎn)通過消息發(fā)送器向所述第二服務(wù)接入點(diǎn)發(fā)送消息;2)所述第二服務(wù)接入點(diǎn)接收消息,執(zhí)行所需服務(wù);3)所述第二服務(wù)接入點(diǎn)返回服務(wù)結(jié)果。
13.如權(quán)利要求12所述的方法,其特征在于,所述消息為同步消息,所述步驟2)具體為所述第二服務(wù)接入點(diǎn)接收消息,調(diào)用相應(yīng)服務(wù)執(zhí)行單元,完成所需服務(wù)。
14.如權(quán)利要求12所述的方法,其特征在于,所述消息為異步消息,所述步驟2)具體為所述第二服務(wù)接入點(diǎn)將所述消息發(fā)送給相應(yīng)的服務(wù)執(zhí)行單元,所述服務(wù)執(zhí)行單元完成所需服務(wù)。
15.如權(quán)利要求14所述的方法,其特征在于,所述步驟3)具體為所述第二服務(wù)接入點(diǎn)創(chuàng)建新的消息,將服務(wù)結(jié)果放入所述新消息中,通過消息發(fā)送器發(fā)送給所述第一服務(wù)接入點(diǎn)。
16.如權(quán)利要求12所述的方法,其特征在于,所述消息包括消息頭和消息體,所述消息頭中至少包含發(fā)送所述消息的服務(wù)接入點(diǎn)標(biāo)識(shí),以及接收所述消息的服務(wù)接入點(diǎn)標(biāo)識(shí),所述消息體包含有服務(wù)需要的數(shù)據(jù)。
17.如權(quán)利要求12所述的方法,其特征在于,所述服務(wù)入點(diǎn)標(biāo)識(shí)由節(jié)點(diǎn)號(hào)、模塊號(hào)和服務(wù)接入點(diǎn)號(hào)組成。
18.如權(quán)利要求17所述的方法,其特征在于,所述模塊還設(shè)有一個(gè)備份模塊,所述步驟1)具體為所述第一服務(wù)接入點(diǎn)通過消息發(fā)送器向第二服務(wù)接入點(diǎn)請(qǐng)求服務(wù),所述消息發(fā)送器向位于所有模塊的所述第二服務(wù)接入點(diǎn)分別發(fā)送請(qǐng)求所述服務(wù)的消息。所述步驟3)具體為位于非備份模塊的所述第二服務(wù)接入點(diǎn)返回服務(wù)結(jié)果。
全文摘要
本發(fā)明提出了一種基于消息的分布式系統(tǒng)以及在其中進(jìn)行通信的方法,所述系統(tǒng)包括至少一個(gè)節(jié)點(diǎn),所述節(jié)點(diǎn)包括至少一個(gè)完成特定功能的模塊,所述模塊包括至少一個(gè)服務(wù)接入點(diǎn),用于接收服務(wù)請(qǐng)求消息,并根據(jù)所述服務(wù)請(qǐng)求消息完成所需服務(wù);消息發(fā)送器,用于將服務(wù)請(qǐng)求消息發(fā)送至目的服務(wù)接入點(diǎn)請(qǐng)求所需服務(wù)。利用本發(fā)明,發(fā)送消息統(tǒng)一使用消息發(fā)送器,接受消息統(tǒng)一使用服務(wù)點(diǎn)接入單元,用戶不用關(guān)心具體信息,只需要知道對(duì)端的接入服務(wù)點(diǎn)標(biāo)識(shí)就能夠完成在分布式環(huán)境下的通信,簡化了開發(fā)的難度,提高了系統(tǒng)的可靠性和可擴(kuò)充性。
文檔編號(hào)H04L29/08GK1984149SQ20061007598
公開日2007年6月20日 申請(qǐng)日期2006年4月27日 優(yōu)先權(quán)日2006年4月27日
發(fā)明者徐彬艷 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
平罗县| 会昌县| 方正县| 海伦市| 贵阳市| 保康县| 石首市| 遂溪县| 浮梁县| 子洲县| 陵水| 徐州市| 九台市| 鹤峰县| 密云县| 晋江市| 内黄县| 浦东新区| 博客| 三亚市| 宜兴市| 永城市| 唐山市| 固安县| 平原县| 申扎县| 汪清县| 连江县| 华蓥市| 泽普县| 宿松县| 东山县| 永和县| 苏尼特左旗| 化州市| 香河县| 松江区| 盐边县| 襄城县| 马鞍山市| 肇州县|