999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

ICE在分布式系統(tǒng)消息中間件中的應(yīng)用*

2015-03-14 10:55:12李緒福雷明濤
艦船電子工程 2015年8期

李緒福 雷明濤

(中國電子科技集團(tuán)公司第二十八研究所 南京 210007)

?

ICE在分布式系統(tǒng)消息中間件中的應(yīng)用*

李緒福 雷明濤

(中國電子科技集團(tuán)公司第二十八研究所 南京 210007)

消息中間件為分布式系統(tǒng)提供高效可靠的數(shù)據(jù)通信環(huán)境,能夠降低分布式應(yīng)用開發(fā)和集成的難度。論文對ICE進(jìn)行了深入研究,包括ICE的體系結(jié)構(gòu)、系統(tǒng)組成和使用模式等。基于該研究,設(shè)計(jì)并實(shí)現(xiàn)了一種消息中間件系統(tǒng),它為分布式系統(tǒng)中創(chuàng)建、發(fā)送和接收消息提供了一套可靠通用的方法。

網(wǎng)絡(luò)通信引擎; 消息中間件; 分布式系統(tǒng)

Class Number TN914

1 引言

在分布式應(yīng)用系統(tǒng)中,中間件位于操作系統(tǒng)和應(yīng)用軟件之間[1],屏蔽了硬件平臺的差異性、操作系統(tǒng)與網(wǎng)絡(luò)協(xié)議的異構(gòu)性、以及編程語言的不同,減少程序設(shè)計(jì)的復(fù)雜性,為應(yīng)用開發(fā)、部署和管理提供方便[2]。

中間件所包括的范圍比較廣泛,針對不同的應(yīng)用需求涌現(xiàn)出多種各具特色的中間件產(chǎn)品。基于目的和實(shí)現(xiàn)機(jī)制的不同,大致分為以下幾類:遠(yuǎn)程過程調(diào)用中間件(Remote Procedure Call)、對象請求代理中間件(Object Request Broker)、面向消息中間件(Message Oriented Middleware)、數(shù)據(jù)庫中間件(Database Middleware)以及事務(wù)處理監(jiān)控中間件(Transaction Processing Monitor)[3]。當(dāng)然,上述中間件的劃分并不是絕對的,各種中間件之間也并不是完全無關(guān)的。

本文所述是一個(gè)基于ICE的消息中間件[4]。因?yàn)镮CE具有與硬件平臺、操作系統(tǒng)、網(wǎng)絡(luò)和開發(fā)語言無關(guān)的特點(diǎn),而面向消息的中間件具有消息驅(qū)動、異步傳輸?shù)奶匦?所以,本文綜合了ICE和面向消息中間件的優(yōu)點(diǎn),設(shè)計(jì)并實(shí)現(xiàn)了一種支持在異構(gòu)平臺分布式對象間進(jìn)行消息通信的消息中間件。

2 ICE概述

網(wǎng)絡(luò)通信引擎(Internet Communications Engine,ICE)是ZeroC公司提供的一款高性能、開放源碼、面向?qū)ο蟮闹虚g件平臺,由一些對CORBA感到失望的“前CORBA專家”們開發(fā),主要應(yīng)用領(lǐng)域有電信、金融、國防、在線娛樂、制造和過程控制等。

從根本上說,ICE為面向?qū)ο蟮腃/S應(yīng)用程序提供工具、應(yīng)用程序編程接口(Application Programming Interface,API)和庫支持[5~6]。ICE支持在異構(gòu)環(huán)境中使用:客戶端和服務(wù)器的編程語言、操作系統(tǒng)、硬件平臺等都可以不同,甚至可以用多種網(wǎng)絡(luò)技術(shù)進(jìn)行通信。

圖1 ICE體系結(jié)構(gòu)圖

如圖1所示,是基于ICE的客戶端/服務(wù)端應(yīng)用程序體系結(jié)構(gòu)圖,它主要包括以下幾個(gè)主要部分:

1) 客戶端/服務(wù)器ICE核心

為客戶端與服務(wù)器遠(yuǎn)程通信提供運(yùn)行時(shí)支持。使網(wǎng)絡(luò)通訊、線程等細(xì)節(jié)對用戶應(yīng)用程序完全透明。

2) 代理程序

代理程序是根據(jù)用戶定義的Slice對象文件,使用ICE提供的工具自動生成的框架代碼,與用戶定義的對象和數(shù)據(jù)類型相對應(yīng),為客戶端應(yīng)用程序提供向下調(diào)用接口。例如,客戶端應(yīng)用程序調(diào)用“代理程序”中的某個(gè)函數(shù),ICE就向服務(wù)器發(fā)送一個(gè)RPC(遠(yuǎn)程過程調(diào)用)消息,調(diào)用目標(biāo)對象中的相應(yīng)函數(shù)。

Slice是special language for ICE的簡稱,類似于CORBA中的IDL,是ICE自己定義的一種語言,用來定義應(yīng)用中的接口、操作以及在客戶端和服務(wù)器端之間交互的數(shù)據(jù)類型。可以通過ICE提供的工具將應(yīng)用程序定義的Slice文件翻譯成不同的語言實(shí)現(xiàn),例如在C++中,通過slice2cpp.exe就可以將定義好的一個(gè)Slice文件編譯成一個(gè)頭文件和cpp文件。由于采用了這種通用的語言定義,使得ICE支持多種語言(包括C++、Java、C#、Python、Objective-C)。

3) ICE接口

ICE對應(yīng)用程序提供的編程接口。

4) 骨架

與代理程序相同,骨架代碼也是通過Slice生成的,為服務(wù)器應(yīng)用程序提供了一個(gè)向上調(diào)用的接口,允許ICE Run Time將控制線程轉(zhuǎn)交給服務(wù)器的應(yīng)用代碼。

5) 對象適配器

服務(wù)器端使用對象適配器。對象適配器將客戶端的調(diào)用請求映射到服務(wù)器端對象上的某個(gè)特定方法,一個(gè)對象適配器與一個(gè)或多個(gè)傳輸端點(diǎn)關(guān)聯(lián)在一起,每個(gè)傳輸端點(diǎn)可使用不同的協(xié)議、地址和端口。

3 系統(tǒng)設(shè)計(jì)

基本設(shè)計(jì)目標(biāo)如下:

1) 支持異構(gòu)平臺分布式對象間的異步消息傳遞[7];

2) 支持基于內(nèi)容的消息路由和轉(zhuǎn)發(fā)[8],即消息的發(fā)送者不需指定消息的接收者,由系統(tǒng)根據(jù)消息的內(nèi)容查找路由并轉(zhuǎn)發(fā)給接收者;

3) 為應(yīng)用程序提供簡單、易用的API接口,應(yīng)用程序不必關(guān)心具體的消息轉(zhuǎn)發(fā)過程。

為滿足上述目標(biāo),基于ICE的消息中間件系統(tǒng)的體系結(jié)構(gòu)如圖2所示。在整個(gè)系統(tǒng)環(huán)境中,設(shè)置一個(gè)中心服務(wù)器,在每個(gè)節(jié)點(diǎn)上,部署一個(gè)消息代理。其中,中心服務(wù)器為消息的發(fā)送端和接收端提供注冊、查詢、修改、刪除等服務(wù),應(yīng)用程序通過API與消息代理進(jìn)行通信。消息代理在每個(gè)節(jié)點(diǎn)上以后臺服務(wù)的方式運(yùn)行,接收應(yīng)用程序的數(shù)據(jù)信息,通過注冊/查詢等操作與中心服務(wù)器進(jìn)行交互,獲得消息轉(zhuǎn)發(fā)所需的接收端地址,在消息代理之間進(jìn)行直接通信[9~10]。

圖2 系統(tǒng)體系結(jié)構(gòu)

應(yīng)用程序使用該系統(tǒng)的步驟為

1) 調(diào)用消息代理提供的API進(jìn)行初始化操作,與消息代理建立連接,以便進(jìn)行數(shù)據(jù)收發(fā)操作。

2) 調(diào)用消息代理提供的API通知消息代理所要發(fā)送或接收的數(shù)據(jù)類型,由消息代理調(diào)用中心服務(wù)器所提供的注冊方法進(jìn)行消息注冊,在中心服務(wù)器上生成消息類型、發(fā)送者和接收者之間的對應(yīng)關(guān)系,建立消息轉(zhuǎn)發(fā)關(guān)系表。

3) 調(diào)用消息代理提供的API進(jìn)行數(shù)據(jù)收發(fā)操作。

如圖2所示,假定節(jié)點(diǎn)A上的應(yīng)用程序A是消息發(fā)送端,節(jié)點(diǎn)B上的應(yīng)用程序B是消息接收端,消息的收發(fā)過程如下:

1) 應(yīng)用程序B調(diào)用消息代理API函數(shù)Init進(jìn)行初始化操作,與節(jié)點(diǎn)A上的消息代理建立連接;然后,應(yīng)用程序B調(diào)用消息代理API函數(shù)subscribe_message,訂閱需要的消息類型;消息代理調(diào)用中心服務(wù)器提供的注冊方法,向中心服務(wù)器進(jìn)行消息注冊;

2) 應(yīng)用程序B調(diào)用消息代理API函數(shù)Init進(jìn)行初始化操作,與節(jié)點(diǎn)B上的消息代理建立連接;

3) 應(yīng)用程序A調(diào)用消息代理API函數(shù)send_message發(fā)送消息,將消息類型和消息內(nèi)容轉(zhuǎn)發(fā)給消息代理;

4) 應(yīng)用程序A所在的消息代理收到應(yīng)用程序A傳來的數(shù)據(jù),向中心服務(wù)器查詢該消息類型對應(yīng)的消息接收者信息;

5) 應(yīng)用程序A所在的消息代理根據(jù)返回的接收者信息,將消息轉(zhuǎn)發(fā)給應(yīng)用程序B所在的消息代理;

6) 應(yīng)用程序B所在的消息代理收到消息之后,向應(yīng)用程序B發(fā)送收到的消息。

至此,一個(gè)消息的發(fā)送和接收過程結(jié)束。

4 系統(tǒng)實(shí)現(xiàn)

系統(tǒng)中有兩類ICE對象,分別是中心服務(wù)器和消息代理,先用Slice定義接口,生成DirectoryService.ice和MessageAgent.ice兩個(gè)文件,然后用Slice編譯器進(jìn)行編譯,在生成的源代碼文件中實(shí)現(xiàn)方法。由于篇幅所限,本文只列出了Slice接口,沒有寫出具體的實(shí)現(xiàn)代碼。

中心服務(wù)器的Slice接口如下:

module RegisterCenter {

interface DirectoryServer{

bool register( // 注冊操作

string name, // 對象名稱

sequence〈int〉 type_list); // 消息類型列表

sequence〈string〉 query( // 查詢操作

string agent_name, // 消息代理名稱

int msg_type); // 消息類型

bool modify( // 修改操作

string agent_name, // 消息代理名稱

int msg_type); // 消息類型

bool unregister(string agent_name); // 注銷操作

};

};

在上述DirectoryServer接口中,定義了注冊、查詢、修改和注銷四個(gè)操作。

1) 注冊操作:有兩個(gè)函數(shù)入?yún)?分別表示調(diào)用注冊操作的對象的名稱(name)和其需要的消息類型列表(type_list)。處理過程是中心服務(wù)器根據(jù)參數(shù)中傳來的信息生成消息類型和接收者的映射表,該操作的返回值表示注冊操作是否成功。

2) 查詢操作:有兩個(gè)函數(shù)入?yún)?分別表示消息代理的名稱(agent_name)和消息類型(msg_type)。處理過程是中心服務(wù)器查詢消息類型和接收者的映射表,并返回參數(shù)中的消息類型對應(yīng)的接收者名稱列表。

3) 修改操作:有兩個(gè)函數(shù)入?yún)?分別表示接收者所在節(jié)點(diǎn)機(jī)上的消息代理的名稱(agent_name)和消息類型(msg_type)。該方法對消息類型和接收者映射表中相應(yīng)的表項(xiàng)進(jìn)行修改,其返回值表示修改操作是否成功。

4) 注銷操作:有一個(gè)函數(shù)入?yún)?表示要注銷的消息代理的名稱,該操作刪除消息類型和接收者映射表中的相應(yīng)表項(xiàng),其返回值表示注銷操作是否成功。

消息代理的Slice接口如下:

module RegisterAgent {

interface MessageAgent{

bool Init(string identifier); // 初始化操作

bool subscribe_message ( // 訂閱消息操作

int msg_type); // 訂閱的消息類型

bool send_message( // 發(fā)送消息操作

int msg_type, // 消息類型

string message); // 消息內(nèi)容

bool recv_message( // 接收消息操作

int msg_type, // 消息類型

string message); // 消息內(nèi)容

};

在上述接口中,有初始化(Init)、訂閱消息(subscribe_message)、發(fā)送消息(send_message)和接收消息(recv_message)四個(gè)操作,其返回值均表示操作是否成功。

1) 初始化操作:有一個(gè)函數(shù)入?yún)?表示應(yīng)用程序標(biāo)識。處理過程是消息代理根據(jù)標(biāo)識與應(yīng)用程序建立連接。

2) 訂閱消息操作:有一個(gè)函數(shù)入?yún)?表示應(yīng)用程序訂閱的消息類型。處理過程是消息代理保存應(yīng)用程序訂閱的消息類型,以便在接收到該類型的消息后發(fā)送給應(yīng)用程序;另外,消息代理調(diào)用中心服務(wù)器的注冊操作,訂閱這種類型的消息。

3) 發(fā)送消息操作:有兩個(gè)函數(shù)入?yún)?分別表示傳給發(fā)送端代理的消息類型和消息內(nèi)容。處理過程是發(fā)送端代理暫時(shí)緩存消息,調(diào)用目錄服務(wù)器的查詢操作,得到這種消息類型所對應(yīng)的接收端代理,調(diào)用接收端代理所提供的接收操作(recv_message),將消息轉(zhuǎn)發(fā)給接收端的代理。

4) 接收消息操作:有兩個(gè)函數(shù)入?yún)?分別表示傳給接收端代理的消息類型和消息內(nèi)容。處理過程是接收端代理緩存收到的消息,然后根據(jù)消息類型查找訂閱該消息的應(yīng)用程序,并將消息傳給應(yīng)用程序。

5 結(jié)語

本文設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)基于ICE的消息中間件系統(tǒng)。其特點(diǎn)是: 1) 支持異構(gòu)平臺下分布式對象間基于消息驅(qū)動的、透明的、異步的消息傳輸; 2) 基于消息內(nèi)容的轉(zhuǎn)發(fā)機(jī)制,應(yīng)用程序不需知道消息的接收者,消息接收者改變時(shí)不需要更改發(fā)送者應(yīng)用程序,實(shí)現(xiàn)了消息發(fā)送者和接收者的解耦,從而具有更大的靈活性; 3) 為應(yīng)用程序提供了簡單、易用的API接口,便于應(yīng)用程序的開發(fā)。

[1] 蔣雄偉,馬范援.中間件與分布式計(jì)算[J].計(jì)算機(jī)應(yīng)用,2002,22(4):6-8.

[2] 周元春,李淼.中間件技術(shù)[J].計(jì)算機(jī)工程與應(yīng)用,2002,38(15):80-85.

[3] 劉裕,吳堅(jiān).中間件技術(shù)與ICE[J].微機(jī)發(fā)展,2004,14(10):37-39.

[4] 王晨,賈卓生.基于ICE中間件的分布式網(wǎng)管系統(tǒng)的研究與設(shè)計(jì)[J].中國科技信息,2007(8):110-112.

[5] 陳增孝,裘雪紅.面向?qū)ο蟮腎CE中間件系統(tǒng)設(shè)計(jì)[J].電子元器件應(yīng)用,2008,10(8):16-18.

[6] 湯曉燕,徐競.ICE中間件的研究與應(yīng)用[J].常熟理工學(xué)院學(xué)報(bào)(自然科學(xué)),2009,23(10):114-118.

[7] 劉萬明,王麗華.基于CORBA的分布式管理系統(tǒng)的研究與實(shí)現(xiàn)[J].河北北方學(xué)院學(xué)報(bào),2007,23(5):37-39.

[8] 陳小弟,李長河,張熙,等.基于LDAP的Internet分布式目錄服務(wù)的分析與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2002,28(8):271-273.

[9] 李衛(wèi)國,王萍.目錄服務(wù)系統(tǒng)及其應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2001,26(5):57-59.

[10] 關(guān)勇,劉建國,陳葆玨.輕量級目錄訪問協(xié)議研究與系統(tǒng)實(shí)現(xiàn)[J].計(jì)算機(jī)研究與發(fā)展,1998,21(10):874-877.

Application of ICE to Message-oriented Middleware in Distributed System

LI Xufu LEI Mingtao

(The 28th Research Institute of China Electronics Technology Group Corporation, Nanjing 210007)

The message-oriented middleware(MOM) provides a suit of reliable and universal method for data communications in distributed system, helps to reduce complexity and difficulty of the application development. This thesis points out the ICE in detail, including the architecture and composition and usage pattern. A message-oriented middleware based on ICE is designed and implemented, which provides a suit of reliable and universal method for creating messages and sending messages and receiving messages in distributed system.

ICE, message-oriented middleware, distributed system

2015年2月3日,

2015年3月16日

李緒福,男,碩士,工程師,研究方向:網(wǎng)絡(luò)通信技術(shù)和分布式處理技術(shù)。雷明濤,男,碩士,工程師,研究方向:數(shù)據(jù)存取技術(shù)、分布式處理技術(shù)。

TN914

10.3969/j.issn1672-9730.2015.08.029

主站蜘蛛池模板: 色综合国产| 久久久久久久97| 欧美日韩理论| 日韩免费毛片| 美女一级毛片无遮挡内谢| 国产午夜人做人免费视频中文| 成人免费视频一区| 亚洲第一成网站| 91视频青青草| 伊人婷婷色香五月综合缴缴情 | 国模视频一区二区| 色综合激情网| 亚洲丝袜第一页| 2022国产91精品久久久久久| 免费又爽又刺激高潮网址| 丝袜高跟美脚国产1区| 四虎综合网| 欧美精品啪啪| 国产日韩欧美视频| 成人午夜网址| 波多野衣结在线精品二区| 高清免费毛片| 四虎永久在线精品影院| 好吊色妇女免费视频免费| a免费毛片在线播放| 波多野结衣一级毛片| 亚洲高清无在码在线无弹窗| 亚洲国产亚洲综合在线尤物| 性欧美久久| 婷婷五月在线视频| 尤物成AV人片在线观看| 精品乱码久久久久久久| 久久综合伊人 六十路| 欧美精品成人| 欧美国产日韩在线| 伊人久久综在合线亚洲91| 成人小视频网| 免费国产在线精品一区| 999国产精品永久免费视频精品久久 | 亚洲国产系列| 无码一区中文字幕| 中文字幕久久波多野结衣| 亚洲三级影院| 欧美日韩一区二区在线播放| 亚洲一区精品视频在线| 在线高清亚洲精品二区| 久久国产免费观看| 四虎在线高清无码| 在线国产综合一区二区三区| 91精品aⅴ无码中文字字幕蜜桃| 国产精品成人一区二区| 91综合色区亚洲熟妇p| 日本人妻一区二区三区不卡影院 | 黄色一级视频欧美| 91无码人妻精品一区二区蜜桃| 久久亚洲日本不卡一区二区| 99久久精品免费看国产电影| 动漫精品啪啪一区二区三区| 国产精品亚洲综合久久小说| 亚洲一区二区三区国产精品 | 久久综合结合久久狠狠狠97色| 性色一区| 蜜臀AVWWW国产天堂| 色偷偷男人的天堂亚洲av| 久久精品国产91久久综合麻豆自制| 亚洲午夜福利精品无码不卡| www.国产福利| 青草视频网站在线观看| 国产高清无码麻豆精品| 国产精品久久自在自2021| 一级全黄毛片| 97成人在线观看| 丁香婷婷久久| 日本尹人综合香蕉在线观看 | 中文字幕在线欧美| 99re在线视频观看| 91欧美亚洲国产五月天| 精品国产自在在线在线观看| 美女高潮全身流白浆福利区| 国产高清在线丝袜精品一区 | 亚洲男人的天堂在线观看| 日韩第一页在线|