熊志剛,李 晶,蘇振揚(yáng),彭衛(wèi)平
(武漢大學(xué)a.計(jì)算機(jī)學(xué)院;b.動(dòng)力與機(jī)械學(xué)院,武漢430072)
一種DDS與ESB通信轉(zhuǎn)換的適配器模型
熊志剛a,李 晶a,蘇振揚(yáng)a,彭衛(wèi)平b
(武漢大學(xué)a.計(jì)算機(jī)學(xué)院;b.動(dòng)力與機(jī)械學(xué)院,武漢430072)
隨著面向服務(wù)架構(gòu)(SOA)的廣泛應(yīng)用,大量采用不同通信技術(shù)的遺留系統(tǒng)以服務(wù)的方式接入企業(yè)服務(wù)總線(ESB)。在實(shí)時(shí)性要求較高的領(lǐng)域,其信息系統(tǒng)一般采用數(shù)據(jù)分發(fā)服務(wù)(DDS)通信技術(shù),將它們接入ESB總線時(shí),必須面對(duì)DDS總線與ESB總線間信息通信轉(zhuǎn)換的問題。為此,設(shè)計(jì)一種通信轉(zhuǎn)換適配器模型,該模型是一種三層體系結(jié)構(gòu),包括SOAP消息收發(fā)層、消息與報(bào)文映射轉(zhuǎn)換層及DDS報(bào)文發(fā)布訂閱層。根據(jù)消息與報(bào)文名稱,遍歷Mapping映射文件,根據(jù)映射規(guī)則進(jìn)行消息與報(bào)文的相互轉(zhuǎn)換,再遍歷消息或報(bào)文的信息模型定義文件,將轉(zhuǎn)換后的結(jié)果解析成通信所用的標(biāo)準(zhǔn)格式,用于通信交互。構(gòu)建一個(gè)ESB與DDS的混合通信系統(tǒng)用于測(cè)試該適配器模型性能,實(shí)驗(yàn)結(jié)果表明,其信息轉(zhuǎn)換耗時(shí)低于100 ms,滿足實(shí)時(shí)性要求。
企業(yè)服務(wù)總線;數(shù)據(jù)分發(fā)服務(wù);適配器;消息隊(duì)列;消息映射;轉(zhuǎn)換;解析
隨著信息技術(shù)的不斷發(fā)展,各行各業(yè)的信息化、自動(dòng)化程度不斷提高,企業(yè)內(nèi)部各信息系統(tǒng)間,企業(yè)與企業(yè)之間就存在大量的數(shù)據(jù)交互、資源共享問題。原有的一些遺留系統(tǒng)成為信息孤島,為實(shí)現(xiàn)對(duì)新系統(tǒng)及原有遺留系統(tǒng)的信息共享資源整合,提出一種基于面向服務(wù)架構(gòu)(Service-oriented Architecture,SOA)的企業(yè)應(yīng)用集成[1]。而企業(yè)服務(wù)總線(Enter-prise Service Bus,ESB)作為SOA架構(gòu)的核心技術(shù),是一個(gè)面向消息的、分布式的、基于標(biāo)準(zhǔn)的、具有智能性路由的系統(tǒng)整合平臺(tái)[2]。ESB使用松耦合的方式,實(shí)現(xiàn)服務(wù)間的通信連接,成為各類應(yīng)用系統(tǒng)間的通信橋梁[3]。任何獨(dú)立系統(tǒng)都作為一個(gè)服務(wù)連接在ESB總線上,并能實(shí)現(xiàn)即插即用[4]。ESB通過預(yù)定義的接口和契約聯(lián)系異構(gòu)的組件,通過基于SOAP標(biāo)準(zhǔn)的消息在各服務(wù)間進(jìn)行信息通信,通過UDDI標(biāo)準(zhǔn)實(shí)現(xiàn)服務(wù)的動(dòng)態(tài)發(fā)現(xiàn),使用分布式管理功能、Web服務(wù)池進(jìn)行智能查找適用的服務(wù),使用開放標(biāo)準(zhǔn)的、非專有的技術(shù)實(shí)現(xiàn)跨越多種平臺(tái)進(jìn)行互操作[5]。
由于系統(tǒng)應(yīng)用需求的不同,以及信息技術(shù)的不斷發(fā)展更新,因此各遺留系統(tǒng)使用的通信技術(shù)也不盡相同。比如航空航天、海洋船舶等行業(yè),對(duì)信息通信的實(shí)時(shí)性要求較高,它們的應(yīng)用系統(tǒng)通常都采用了數(shù)據(jù)分發(fā)服務(wù)(Data Distribution Service,DDS)作為系統(tǒng)通信技術(shù)[6]。DDS是一種采用實(shí)時(shí)發(fā)布——訂閱協(xié)議的分布式系統(tǒng)標(biāo)準(zhǔn),此標(biāo)準(zhǔn)提供了一種與語言、系統(tǒng)平臺(tái)及位置無關(guān)的通用應(yīng)用層接口,為分布式計(jì)算環(huán)境提供了一種以數(shù)據(jù)為中心的通信規(guī)范。該模式定義了2種基本角色,發(fā)布者:創(chuàng)建數(shù)據(jù),給數(shù)據(jù)命名(即主題)并發(fā)布該數(shù)據(jù);訂閱者:根據(jù)自身需求訂閱所需服務(wù),當(dāng)訂閱服務(wù)的數(shù)據(jù)產(chǎn)生變化時(shí),接收改變后的數(shù)據(jù)。通過發(fā)布訂閱的形式,實(shí)現(xiàn)信息交互共享[7]。因此,當(dāng)將一個(gè)采用DDS通信技術(shù)的系統(tǒng),作為一個(gè)服務(wù)接入到ESB總線時(shí),必然要面對(duì)SOAP消息與DDS報(bào)文間的信息轉(zhuǎn)換問題。針對(duì)該問題,本文設(shè)計(jì)一種通信轉(zhuǎn)換適配器作為ESB總線與DDS總線間連接的橋梁,實(shí)現(xiàn)SOAP消息與DDS報(bào)文間的信息轉(zhuǎn)換。
為對(duì)DDS與ESB通信轉(zhuǎn)換適配器模型進(jìn)行研究,本文設(shè)計(jì)一個(gè)基于ESB與DDS混合通信的SOA框架系統(tǒng)[8],通過運(yùn)行該系統(tǒng)來驗(yàn)證適配器模型的功能及處理性能。該系統(tǒng)主要由三部分組成[9],前臺(tái)的客戶端顯控界面,用于發(fā)布服務(wù)請(qǐng)求及顯示服務(wù)結(jié)果;中間的通信適配器,完成SOAP消息與DDS報(bào)文的相互轉(zhuǎn)換分發(fā)功能;以及后臺(tái)的DDS服務(wù)端,實(shí)現(xiàn)某種應(yīng)用服務(wù)功能。其中, ESB總線部分使用IBM公司的WebSphere Message Broker來控制消息的路由轉(zhuǎn)發(fā)[10],而DDS通信部分則采用了RTI公司的DDS網(wǎng)絡(luò)通信中間件。信息流程見圖1。
圖1 ESB與DDS通信系統(tǒng)信息流程
根據(jù)實(shí)時(shí)與非實(shí)時(shí)應(yīng)用分開的原則,將實(shí)時(shí)應(yīng)用與非實(shí)時(shí)應(yīng)用分別集成在DDS總線與ESB總線上,適配器作為雙方通信轉(zhuǎn)換的橋梁,橋接在2條總線之間。適配器模型中通過消息流存取發(fā)送的SOAP消息,通過DDS發(fā)布訂閱管理器收發(fā)DDS報(bào)文。其中消息流以服務(wù)的方式發(fā)布在ESB總線上,消息流接收ESB總線上的SOAP消息后,存入一個(gè)消息隊(duì)列(MQ)中,適配器則調(diào)用MQ的API提取SOAP消息。另一方面對(duì)于DDS總線而言,適配器被當(dāng)作DDS的應(yīng)用節(jié)點(diǎn),其需要訂閱與ESB總線端通信的所有DDS服務(wù)的TOPIC。
啟動(dòng)仿真系統(tǒng)后,客戶端顯控界面發(fā)布自己的服務(wù)請(qǐng)求,以SOAP消息的形式封裝請(qǐng)求,并將該消息發(fā)送給ESB總線上的某個(gè)消息流。消息流將收到的SOAP消息存入到消息隊(duì)列Adapterin中,然后消息流調(diào)用適配器模型。適配器模型通過MQ的應(yīng)用接口從Adapterin隊(duì)列中取出消息,去除用于封裝SOAP消息的消息頭,提取出該消息有效數(shù)據(jù),從消息體中找到UnitID元素,根據(jù)該UnitID及信息映射文件的定義,轉(zhuǎn)換為對(duì)應(yīng)的DDS報(bào)文,交由DDS發(fā)布訂閱管理器發(fā)布該報(bào)文。后臺(tái)DDS服務(wù)端,由于事先已經(jīng)訂閱了該主題,直接獲取該報(bào)文并進(jìn)行相關(guān)服務(wù)處理后發(fā)布返回的DDS報(bào)文,適配器已經(jīng)訂閱了所有主題的服務(wù),當(dāng)相關(guān)主題的數(shù)據(jù)改變后,能及時(shí)接收該報(bào)文,根據(jù)報(bào)文名稱通過mapping文件找到對(duì)應(yīng)的映射規(guī)則,轉(zhuǎn)換為返回的SOAP消息,存入到AdapterOut消息隊(duì)列中,然后由消息流提取并發(fā)送回客戶端顯控界面[11]。適配器模型體系結(jié)構(gòu)見圖2。
圖2 適配器體系結(jié)構(gòu)
3.1 ESB消息及DDS報(bào)文結(jié)構(gòu)設(shè)計(jì)
ESB消息由協(xié)議頭與邏輯層次兩部分組成,協(xié)議頭中包含了該消息的基本信息,包括消息屬性、發(fā)方IP地址、收方IP地址、單位標(biāo)識(shí)、單元長(zhǎng)度5個(gè)數(shù)據(jù)字段。其中UnitID為每個(gè)消息的唯一標(biāo)識(shí)符,用于不同消息間的區(qū)分。邏輯層次則包含了該消息的所有有效字段,例如本文中所用到的消息有效字段就包括速度、方位角、里程等信息字段。該消息所有有效字段都是自定義的數(shù)據(jù)結(jié)構(gòu),在esb.xsd信息模型文件中對(duì)消息的所有字段類型進(jìn)行了相關(guān)定義[12],該模型文件在后文中將做詳細(xì)介紹。在系統(tǒng)應(yīng)用中,整個(gè)ESB消息作為消息體的有效數(shù)據(jù),被封裝在一個(gè)SOAP消息中,通過SOAP消息進(jìn)行信息傳遞。
與此類似,DDS報(bào)文也由兩部分構(gòu)成,首先是報(bào)文頭,包括了報(bào)文的5個(gè)基本屬性(報(bào)文名稱、關(guān)鍵字、域、類型、主題名),其中報(bào)文名稱是某一類報(bào)文的唯一標(biāo)示符,而關(guān)鍵字則用于同一類型報(bào)文之間的區(qū)分符號(hào)。同樣的第2部分也是報(bào)文的邏輯層次,定義了該報(bào)文所要傳遞信息的所有有效字段。本文中的DDS報(bào)文有效字段包括速度、方向角、里程等信息字段。邏輯層次中所有有效字段都是自定義數(shù)據(jù)結(jié)構(gòu),每種數(shù)據(jù)結(jié)構(gòu)都在dds.xsd文件中進(jìn)行了詳細(xì)定義,包括該字段的長(zhǎng)度、基本類型、基本單位等信息。
3.2 信息模型定義文件
本文設(shè)計(jì)的適配器進(jìn)行消息與報(bào)文間轉(zhuǎn)換的核心在于,通過mapping映射文件,將對(duì)應(yīng)字段進(jìn)行替換。替換完成后根據(jù)數(shù)據(jù)結(jié)構(gòu)定義的XSD文件,將報(bào)文內(nèi)容解析成DDS自帶的數(shù)據(jù)類型,并按順序?qū)懭胍欢尉彺嬷邪l(fā)布出去。因此,該轉(zhuǎn)換過程中的關(guān)鍵在于數(shù)據(jù)模型的建立,接下來重點(diǎn)介紹本文中所用的數(shù)據(jù)模型定義文件。
mapping文件的作用在于定義了SOAP消息及DDS報(bào)文之間的映射關(guān)系,在mapping根元素下面有多個(gè)esbdds子元素,每個(gè)子元素定義了一種消息與報(bào)文之間的映射關(guān)系。該元素主要包含3個(gè)部分,第1部分為dds子元素,定義了DDS報(bào)文頭的所有內(nèi)容;第2部分為esb子元素,定義了ESB消息的協(xié)議頭部分的所有內(nèi)容;最后一部分則是elemmap子元素,每個(gè)子元素定義了ESB消息與DDS報(bào)文邏輯層次中,某對(duì)有效字段間的映射關(guān)系。mapping文件結(jié)構(gòu)見圖3。
圖3 mapping文件結(jié)構(gòu)
DDS報(bào)文數(shù)據(jù)模型的定義文件dds.xsd,該文件中定義了本系統(tǒng)所有DDS報(bào)文的數(shù)據(jù)結(jié)構(gòu),每個(gè)報(bào)文都是一種自定義的復(fù)雜數(shù)據(jù)類型,包含一個(gè)sequence子元素,即報(bào)文中每個(gè)有效字段都是按指定順序排列。每個(gè)有效字段也是一種自定義的復(fù)雜數(shù)據(jù)類型,每種字段的復(fù)雜數(shù)據(jù)類型又在basicdds. xsd文件中做了詳細(xì)定義。在basicdds.xsd文件中,將每種自定義數(shù)據(jù)類型,分解成某種基本數(shù)據(jù)類型(如string、octets等),并且含有該數(shù)據(jù)類型的字段長(zhǎng)度、單位等基本屬性。與此相同,esb.xsd文件則是定義了系統(tǒng)中所有用到的ESB消息的數(shù)據(jù)結(jié)構(gòu)。
3.3 數(shù)據(jù)類型的基本屬性
每種數(shù)據(jù)類型都含有3個(gè)基本屬性:datatype, bytes及baseunit。其中,datatype為數(shù)據(jù)類型代碼,共定義了7種數(shù)據(jù)類型(0代表未指定類容,1代表BCD碼,2代表無符號(hào)整形,3表示二進(jìn)制補(bǔ)碼,4代表離散數(shù)值,5表示編碼值,6是字符型)。Bytes則定義了該數(shù)據(jù)類型所占緩存大小。Baseunit表示基本單位,初始值為1.0,不同數(shù)據(jù)類型基本單位值不同,用于該數(shù)據(jù)類型與二進(jìn)制代碼間的轉(zhuǎn)換。
由于收發(fā)的DDS報(bào)文都是一段連續(xù)的緩存,要按照?qǐng)?bào)文信息模型的定義,依次取出各字段的有效值。此時(shí)就需要用到各字段的3個(gè)基本屬性,根據(jù)默認(rèn)定義,該緩存前16個(gè)字節(jié)默認(rèn)存儲(chǔ)報(bào)文名稱,此后按照信息模型的定義順序,及各字段的字段長(zhǎng)度,依次獲得各字段的二進(jìn)制代碼。然后根據(jù)該字段的數(shù)據(jù)類型代碼,調(diào)用對(duì)應(yīng)轉(zhuǎn)換語句,獲得該字段對(duì)應(yīng)數(shù)據(jù)類型的有效值。
3.4 自定義數(shù)據(jù)結(jié)構(gòu)
在信息轉(zhuǎn)換過程中,為方便數(shù)據(jù)存儲(chǔ),自定義了多種數(shù)據(jù)結(jié)構(gòu),以下簡(jiǎn)單的介紹幾種重要數(shù)據(jù)結(jié)構(gòu)。包括用于存儲(chǔ)消息或報(bào)文有效字段名稱及取值的mapnode,用于映射轉(zhuǎn)化時(shí)存儲(chǔ)消息或報(bào)文定義特征值及其在映射文件中的元素地址值,各結(jié)構(gòu)體的具體定義及功能如表1所示。
表1 重要結(jié)構(gòu)體定義及功能
此外,本文還用到了3個(gè)Vector容器ESBInfo, DDSInfo,MappingMap(容器類型都是Vector<Mapnode>類型),其中,ESBInfo用于存儲(chǔ)ESB消息協(xié)議頭及其邏輯層次、各有效字段名及其取值。同樣DDSInfo用于存儲(chǔ)DDS報(bào)文協(xié)議頭及其邏輯層次,各有效字段名及其取值。而Mappingmap則是存儲(chǔ)映射文件中定義的,ESB消息及其對(duì)應(yīng)DDS報(bào)文各有效字段的映射關(guān)系。
4.1 SOAP消息轉(zhuǎn)換為DDS報(bào)文的過程
系統(tǒng)啟動(dòng)后,客戶端顯控界面發(fā)出服務(wù)請(qǐng)求的SOAP消息,經(jīng)消息流接收并存儲(chǔ)于AdapterIn消息隊(duì)列中。適配器模型從AdapterIn消息隊(duì)列中取出該消息,去除消息頭,提取出消息體中的有效信息ESB消息(以xml的元素節(jié)點(diǎn)形式)。然后用xerces c++DOM解析該元素,得到該ESB消息的協(xié)議頭及邏輯層次的所有有效字段名及其取值。各字段名稱及取值以MapNode結(jié)構(gòu)體的形式,依次存入ESBInfo容器中。
然后再用xerces c++DOM解析信息映射文件Mapping.xml[13],依次遍歷該文件的每個(gè)esbdds子元素,從而得到每個(gè)子元素的UnitID值。將每個(gè)UnitID值及其所屬元素的地址值以esbiden的結(jié)構(gòu)體形式,依次存入名為set的vector容器中。然后再遍歷set容器,從中找到與所要轉(zhuǎn)換的ESB消息UnitID值相同的esbdds元素,得到該元素的地址值。再用xerces c++DOM解析該元素,將它所有的elemmap子元素中有效字段的映射關(guān)系存入mapping容器中,并獲取該SOAP消息轉(zhuǎn)換后對(duì)應(yīng)的DDS報(bào)文名稱,及轉(zhuǎn)換后對(duì)應(yīng)DDS報(bào)文協(xié)議頭部分,然后根據(jù)提取出的映射關(guān)系,將ESBInfo中存儲(chǔ)的所有邏輯層次有效字段值,賦值給對(duì)應(yīng)DDS報(bào)文邏輯層次的有效字段,從而得到了完整的DDS報(bào)文內(nèi)容。再按照預(yù)先定義好的xml文檔格式,將該DDS報(bào)文內(nèi)容轉(zhuǎn)換生成一個(gè)xml文件。
然后再用xerces c++DOM解析DDS報(bào)文的信息模型定義文件dds.xsd,依次遍歷該文件的每個(gè)子元素,找到轉(zhuǎn)換后報(bào)文的結(jié)構(gòu)定義子元素。繼續(xù)解析該元素,找到該報(bào)文每個(gè)有效字段的自定義數(shù)據(jù)類型,再解析basicdds.xsd文件,找到每種自定義數(shù)據(jù)類型的結(jié)構(gòu)定義,得到其基本類型名及其3個(gè)基本屬性(bytes,datatype,baseunit)。將前面得到的DDS報(bào)文的內(nèi)容,轉(zhuǎn)換為DDS內(nèi)含數(shù)據(jù)類型,并依次存入一段緩存中。開始的16個(gè)字節(jié)默認(rèn)為存儲(chǔ)關(guān)鍵字,其后按信息模型定義的順序,依次寫入各有效字段值。通過提取每個(gè)有效字段的3個(gè)基本屬性,根據(jù)bytes值得到該字段所占內(nèi)存大小,根據(jù)datatype值等到其所屬數(shù)據(jù)類型,再調(diào)用相應(yīng)處理函數(shù)轉(zhuǎn)換為其對(duì)應(yīng)的DDS內(nèi)含數(shù)據(jù)類型值。將該報(bào)文的所有內(nèi)容轉(zhuǎn)換并存儲(chǔ)于一段緩存后,將該段緩存交由DDS發(fā)布訂閱管理器,通過發(fā)布者將報(bào)文發(fā)布出去[14]。
4.2 DDS報(bào)文轉(zhuǎn)換為SOAP消息的過程
在適配器運(yùn)行時(shí),就已創(chuàng)建了DDS發(fā)布訂閱管理對(duì)象,其一直監(jiān)聽網(wǎng)絡(luò)中是否有自己訂閱主題的DDS服務(wù),一旦發(fā)現(xiàn)則接收并讀取該報(bào)文[15]。將獲取的內(nèi)容存在一段緩存中,按照該報(bào)文定義格式,依次讀取該緩存,獲取報(bào)文各字段的二進(jìn)制代碼,然后交由報(bào)文處理對(duì)象進(jìn)行報(bào)文解析。
首先根據(jù)報(bào)文名稱,將該報(bào)文的關(guān)鍵字及其有效值成對(duì)存入一個(gè)名為respDDSMap的VECTOR容器中。然后按照?qǐng)?bào)文名稱,從dds.xsd文件中剛找到該報(bào)文數(shù)據(jù)模型的定義元素eltpack。用xerces c++ DOM解析該元素,從而提取出該DDS報(bào)文中報(bào)文頭的field,theme,type這3個(gè)基本屬性,并與其對(duì)應(yīng)值一起存入respDDSMap容器中。
然后解析遍歷eltpck元素,獲取該報(bào)文所有有效字段名及其數(shù)據(jù)類型。解析遍歷basicdds.xsd文件,從而得到各字段數(shù)據(jù)類型的詳細(xì)信息(如bytes, datatype,baseunit這3個(gè)基本屬性及備注信息)。根據(jù)各字段的詳細(xì)信息,從該DDS報(bào)文緩存中,依次取出各字段所占內(nèi)存中的二進(jìn)制代碼。按照轉(zhuǎn)換規(guī)則,轉(zhuǎn)換成該字段數(shù)據(jù)類型的對(duì)應(yīng)取值。按照定義好的xml文件結(jié)構(gòu),將獲取的DDS報(bào)文內(nèi)容生成一個(gè)DOMElement?的元素節(jié)點(diǎn)。解析該xml元素,提取出DDS報(bào)文各有效字段名稱及取值,成對(duì)的存入一個(gè)名為DDSInfo的容器中。遍歷解析mapping文件,按照該報(bào)文名稱,得到該報(bào)文所在的esbdds元素。從該esbdds元素中找到UnitID,unitlenth等對(duì)應(yīng)ESB消息協(xié)議頭部分的有效字段。根據(jù)映射規(guī)則,將DDS報(bào)文所有字段的內(nèi)容,賦予對(duì)應(yīng)ESB消息的相應(yīng)字段。再按照xml文件的格式定義,生成ESB消息。將該ESB消息作為消息體的有效數(shù)據(jù)字段,加上SOAP消息頭,封裝成一個(gè)SOAP消息,再將該SOAP消息存入adapterOut消息隊(duì)列中,由消息流取出發(fā)送出去。
針對(duì)上文提出的適配器模型設(shè)計(jì)方案,編寫完成適配器模型后,將其應(yīng)用于上述的ESB與DDS通信仿真系統(tǒng)中。運(yùn)行系統(tǒng),對(duì)適配器進(jìn)行功能與轉(zhuǎn)化時(shí)間的測(cè)試。實(shí)驗(yàn)環(huán)境介紹如下:
實(shí)驗(yàn)設(shè)備:惠普工作站;
CPU:Intel Xeon 5160;
內(nèi)存:3 GB;
操作系統(tǒng):Microsoft Windows XP專業(yè)版SP3;
軟件環(huán)境:Microsoft Visual 2005,RTI DDS, Altora XMLSpy 2006;Websphere MQ version 7.0.1.0 Message Broker Toolkit 7.0。
實(shí)驗(yàn)數(shù)據(jù)檢查表如圖4所示,其中詳細(xì)列出了SOAP消息及DDS報(bào)文所含數(shù)據(jù)項(xiàng),供實(shí)驗(yàn)人員記錄并分析實(shí)驗(yàn)結(jié)果使用。
圖4 實(shí)驗(yàn)數(shù)據(jù)檢查表
5.1 功能測(cè)試
啟動(dòng)仿真系統(tǒng)后,適配器不斷接收服務(wù)請(qǐng)求的SOAP消息,完成信息轉(zhuǎn)換及轉(zhuǎn)發(fā)功能。測(cè)試工具分別在2條數(shù)據(jù)總線上監(jiān)視對(duì)應(yīng)信息,通過ADO方式操作ACCESS數(shù)據(jù)庫(kù),將每個(gè)ESB消息及DDS報(bào)文的內(nèi)容存入數(shù)據(jù)庫(kù)中,待實(shí)驗(yàn)結(jié)束時(shí)提取數(shù)據(jù)庫(kù)中內(nèi)容,對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析。根據(jù)實(shí)驗(yàn)要求,從數(shù)據(jù)庫(kù)中隨機(jī)抽取60組實(shí)驗(yàn)數(shù)據(jù),按照?qǐng)D4格式,將實(shí)驗(yàn)數(shù)據(jù)填入表格中,將每組報(bào)文及消息數(shù)據(jù)字段與目標(biāo)數(shù)據(jù)進(jìn)行比對(duì),得到實(shí)驗(yàn)結(jié)果100%正確。
5.2 處理時(shí)間性能測(cè)試
方法與功能測(cè)試相似,在系統(tǒng)運(yùn)行過程中,每當(dāng)適配器提取一條ESB消息時(shí),程序會(huì)將此刻的系統(tǒng)時(shí)間t1存入數(shù)據(jù)庫(kù)中,然后經(jīng)過信息轉(zhuǎn)換生成DDS報(bào)文,在發(fā)布報(bào)文的同時(shí)將此刻的系統(tǒng)時(shí)間t2存入數(shù)據(jù)庫(kù)。待DDS處理服務(wù)處理完成后,適配器根據(jù)訂閱的主題名,獲取返回的DDS報(bào)文并將此刻的系統(tǒng)時(shí)間t3存入數(shù)據(jù)庫(kù)。完成信息轉(zhuǎn)換后,將生成的ESB消息存入消息隊(duì)列,同時(shí)存入此刻的系統(tǒng)時(shí)間t4。實(shí)驗(yàn)完成后,從數(shù)據(jù)庫(kù)中隨機(jī)抽取60組實(shí)驗(yàn)數(shù)據(jù),計(jì)算出ESB消息轉(zhuǎn)換為DDS報(bào)文所需處理時(shí)間Te,及逆向DDS報(bào)文轉(zhuǎn)換為ESB消息處理時(shí)間Td。處理時(shí)間實(shí)驗(yàn)結(jié)果見圖5、圖6。
圖5 ESB消息轉(zhuǎn)換為DDS報(bào)文的處理時(shí)間
圖6 DDS報(bào)文轉(zhuǎn)換為ESB消息的處理時(shí)間
實(shí)驗(yàn)的數(shù)據(jù)結(jié)果如表2所示,從表中可以清楚地看出,2組實(shí)驗(yàn)結(jié)果都符合實(shí)驗(yàn)設(shè)計(jì)處理時(shí)長(zhǎng)100 ms的要求,處理時(shí)間基本都在47 ms左右,最高不超過63 ms。通過樣本方差及樣本期望值的比較,可知ESB消息轉(zhuǎn)換為DDS報(bào)文時(shí),適配器模型平均處理時(shí)間稍短且更加穩(wěn)定。
表2 實(shí)驗(yàn)數(shù)據(jù)統(tǒng)計(jì)
針對(duì)SOA架構(gòu)中原有遺留系統(tǒng)的不同通信技術(shù)與ESB總線間通信適配問題,本文設(shè)計(jì)了一種DDS與ESB通信轉(zhuǎn)換的適配器模型,并通過一個(gè)ESB與DDS混合通信系統(tǒng)的運(yùn)行驗(yàn)證,該適配器程序能準(zhǔn)確、及時(shí)地完成SOAP消息與DDS報(bào)文間的轉(zhuǎn)換及分發(fā)功能。通過預(yù)定義的信息模型文件,解析自定義的映射文件,完成信息數(shù)據(jù)間的映射轉(zhuǎn)換。但還有一些不足之處,如消息與報(bào)文間的轉(zhuǎn)換只能在預(yù)先定義好的消息報(bào)文之間,不能達(dá)到運(yùn)行時(shí)自定義轉(zhuǎn)換關(guān)系,這也是今后研究的重點(diǎn)內(nèi)容。
[1] Papazoglou M P,van den Heuvel W J.Service Oriented Architectures:Approaches,Technologies and Research Issues[J].VLDB Journal,2007,16(3):389-415.
[2] Schmidt M T,Hutchison B,Lambros P.The Enterprise ServiceBus:MakingService-orientedArchitecture Real[J].IBM Systems Journal,2005,44(4):781-797.
[3] 李曉東,楊 揚(yáng),郭文彩.基于企業(yè)服務(wù)總線的數(shù)據(jù)共享與交換平臺(tái)[J].計(jì)算機(jī)工程,2006,32(21): 217-219.
[4] 邵歡慶,康建初.企業(yè)服務(wù)總線的研究與應(yīng)用[J].計(jì)算機(jī)工程,2007,33(2):220-222.
[5] 曾文英,趙躍龍,齊德昱.ESB原理、構(gòu)架、實(shí)現(xiàn)及應(yīng)用[J].計(jì)算機(jī)工程與應(yīng)用,2008,44(25):225-228.
[6] 姚 兵,蔡 婷,李峻林,等.基于DDS模型的數(shù)據(jù)分發(fā)中間件的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì), 2009,30(3):619-623.
[7] Tijero H P,Gutierrez J J.On the Schedulability of a Data-centric Real-time Distribution Middleware[J]. Computer Standards&Interfaces,2012,34(1):203-211.
[8] 麻志毅,陳漢婕.一種面向服務(wù)的體系結(jié)構(gòu)參考模型[J].計(jì)算機(jī)學(xué)報(bào),2006,29(7):1011-1019.
[9] 張廣勝,蔣昌俊,湯憲飛,等.面向服務(wù)的企業(yè)應(yīng)用集成系統(tǒng)描述與驗(yàn)證[J].軟件學(xué)報(bào),2007,18(12): 3015-3030.
[10] 劉振頂.企業(yè)服務(wù)總線(ESB)在SOA中SOAP消息路由機(jī)制的研究與實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué),2008.
[11] 郭文越,陳 虹,劉萬軍.基于SOA的數(shù)據(jù)共享與交換平臺(tái)[J].計(jì)算機(jī)工程,2010,36(19):217-219.
[12] 張 濤.基于XML和Web services異構(gòu)數(shù)據(jù)轉(zhuǎn)換的設(shè)計(jì)和實(shí)現(xiàn)[D].青島:中國(guó)海洋大學(xué),2009.
[13] 章 明,許青松,沈錫臣.基于XML數(shù)據(jù)交換共享平臺(tái)模型[J].清華大學(xué)學(xué)報(bào):自然科學(xué)版,2003,43(1): 105-107.
[14] 曹萬華,謝 蓓,吳海昕,等.基于DDS的發(fā)布/訂閱中間件設(shè)計(jì)[J].計(jì)算機(jī)工程,2007,33(18):78-83.
[15] Sanchez-Monedero Javier,Povedano-Molina J,Lopez-Vega J M.Bloom Filter-based Discovery Protocol for DDS Middleware[J].Journal of Parallel and Distributed Computing,2011,71(10):1305-1317.
編輯 金胡考
An Adapter Model for DDS and ESB Communication Conversion
XIONG Zhiganga,LI Jinga,SU Zhenyanga,PENG Weipingb
(a.Computer School;b.School of Power and Mechanical Engineering,Wuhan University,Wuhan 430072,China)
With Service-oriented Architecture(SOA)being widely used,a large number of legacy systems with different communication technologies are accessing the Enterprise Service Bus(ESB)by the way of a service.In some real-time field with higher requirements,these information systems generally adopt the Data Distribution Service(DDS) communication technology.When these systems are accessing the ESB,it meets the communication conversion problem between ESB and DDS.On this basis,this paper designs a communication adapter model which is a three-tier architecture,including ESB messaging layer,messages and packets conversion layer and DDS packets publish-subscribe layer.According to the message and packet name,adapter traverses the mapping file and achieves conversion function between packet and message.Adapter traverses the information model definition file.The results after conversion is converted into a standard format used for communication.This paper builds a hybrid communication system between ESB and DDS to test the performance of the adapter model.Experimental results show that the communication conversion costs lower than100 ms and meets the real-time requirements.
Enterprise Service Bus(ESB);Data Distribution Service(DDS);adapter;message queue;message mapping;conversion;parse
熊志剛,李 晶,蘇振揚(yáng),等.一種DDS與ESB通信轉(zhuǎn)換的適配器模型[J].計(jì)算機(jī)工程, 2015,41(2):70-75.
英文引用格式:Xiong Zhigang,Li Jing,Su Zhenyang,et al.An Adapter Model for DDS and ESB Communication Conversion[J].Computer Engineering,2015,41(2):70-75.
1000-3428(2015)02-0070-06
:A
:TP393
10.3969/j.issn.1000-3428.2015.02.014
國(guó)家“863”計(jì)劃基金資助項(xiàng)目(2012AA040910);國(guó)家自然科學(xué)基金資助項(xiàng)目(51275362)。
熊志剛(1987-),男,碩士研究生,主研方向:SOA架構(gòu),信息系統(tǒng);李 晶(通訊作者),教授、博士;蘇振揚(yáng),博士研究生;彭衛(wèi)平,教授、博士。
2014-03-05
:2014-04-15E-mail:leejingcn@msn.com