通常,通過消息系統(tǒng)集成的應(yīng)用很少有同樣的消息格式。比如說,一個(gè)帳務(wù)系統(tǒng)同一個(gè)CRM系統(tǒng)對(duì)客戶對(duì)象是有著不同的概念的。基于這個(gè),一個(gè)系統(tǒng)可能將消息存儲(chǔ)在關(guān)系表中,另一個(gè)可能存儲(chǔ)在文件中。集成已存在的系統(tǒng)通常意味著我們沒有修改系統(tǒng)以便使他們更好的一起工作的自由。然而,集成方案不得不協(xié)調(diào)和解決各種系統(tǒng)之間的不同。Message Translator模式提供了一個(gè)通用的解決方案。這里解釋幾種特定的Message Translator。
Message Transformation包含以下幾種模式:
l Envelope Wrapper
l Content Enricher
l Content Filter
l Claim Check
l Normalizer
l Canonical Data Model
大多數(shù)消息系統(tǒng)放置特定的需求在消息頭的格式和內(nèi)容中。我們包裝有效數(shù)據(jù)到一個(gè)Envelope Wrapper中以適應(yīng)消息基礎(chǔ)設(shè)施的需求。如果消息需要穿過不同的消息基礎(chǔ)設(shè)施,可以結(jié)合多個(gè)Envelope Wrapper。
如果原始系統(tǒng)不能提供目標(biāo)系統(tǒng)需要的數(shù)據(jù)域,可以使用一個(gè)Content Enricher。它可以查找缺少的信息并從已有數(shù)據(jù)中計(jì)算出它。Content Filter正好相反,它從消息中刪除不需要的數(shù)據(jù)。Claim Check也從消息中刪除數(shù)據(jù),但是它將存儲(chǔ)他們以便以后取回。Normalizer將多個(gè)不同格式的消息翻譯成統(tǒng)一格式。
消除依賴
消息轉(zhuǎn)換在集成中是一個(gè)很深的話題。Message Channels和Message Routers可以通過消除應(yīng)用必須知道另外一個(gè)應(yīng)用的位置的需求從而解除應(yīng)用間的基本依賴。
一個(gè)應(yīng)用可以發(fā)送一個(gè)消息到Message Channel而不必?fù)?dān)心誰來取出消息。然而消息格式增加了另外一種依賴。如果一個(gè)應(yīng)用不得不將消息格式化成另外一個(gè)應(yīng)用的數(shù)據(jù)格式,通過Message Channel解耦的說法就像一個(gè)幻想。接收系統(tǒng)的任何改變或切換到另外一個(gè)接收系統(tǒng)都需要對(duì)發(fā)送應(yīng)用進(jìn)行改變。Message Translators可以幫助除去這種依賴。
元數(shù)據(jù)管理
將消息從一個(gè)消息格式轉(zhuǎn)換到另一個(gè)格式需要操作元數(shù)據(jù) - 描述數(shù)據(jù)格式的數(shù)據(jù)。
元數(shù)據(jù)在兩個(gè)并行系統(tǒng)之間的集成中扮演著非常重要的角色。一個(gè)處理實(shí)際的消息數(shù)據(jù),另外一個(gè)處理元數(shù)據(jù)。許多用于處理消息數(shù)據(jù)的模式也同樣可以管理元數(shù)據(jù)。比如說,Channel Adapter不僅可以從一個(gè)系統(tǒng)中移進(jìn)和移出消息,還可以從一個(gè)外部應(yīng)用中獲取元數(shù)據(jù),并將其加載到一個(gè)元數(shù)據(jù)倉(cāng)庫(kù)中。使用這個(gè)倉(cāng)庫(kù),集成開發(fā)者可以定義應(yīng)用元數(shù)據(jù)與Canonical Data Model.之間的轉(zhuǎn)換。
元數(shù)據(jù)集成

舉例來說,上面的圖描述了兩個(gè)需要交換客戶信息的應(yīng)用的集成。每個(gè)系統(tǒng)的客戶數(shù)據(jù)的定義稍有不同。從A到B的消息需要轉(zhuǎn)換一下才能被B接收。如果Channel Adapters可以抽取元數(shù)據(jù)的話,創(chuàng)建一個(gè)轉(zhuǎn)換將非常簡(jiǎn)單。然后這個(gè)元數(shù)據(jù)可以被放入一個(gè)倉(cāng)庫(kù),大大的簡(jiǎn)化了Message Translator的配置和驗(yàn)證。元數(shù)據(jù)可以被存儲(chǔ)成不同的格式。通常XML消息使用XSD格式。其他EAI工具實(shí)現(xiàn)所有元數(shù)據(jù)格式,但是允許管理員導(dǎo)入或?qū)С龅狡渌袷健?/SPAN>
消息系統(tǒng)外的數(shù)據(jù)轉(zhuǎn)換
這些轉(zhuǎn)換模式組成的很多原則可以被應(yīng)用于非消息集成。比如說,File Transfer可以執(zhí)行系統(tǒng)間的轉(zhuǎn)換工作。類似的,Remote Procedure Invocation必須使請(qǐng)求使用要調(diào)用的service的格式,即使應(yīng)用本身的格式可能不同。典型的,需要調(diào)用程序來執(zhí)行轉(zhuǎn)換。一些最成熟的轉(zhuǎn)換引擎組成了ETL工具,比如Informatica或者DataMirror。這些工具一般都一次轉(zhuǎn)換大量的數(shù)據(jù),而不是轉(zhuǎn)換單個(gè)消息。
Message System應(yīng)專注于幾種基本的Message Translator模式。而不應(yīng)該關(guān)心實(shí)體間結(jié)構(gòu)轉(zhuǎn)換的細(xì)節(jié)(不同的數(shù)據(jù)模型之間的轉(zhuǎn)換,比如ER模型不支持多對(duì)多關(guān)系而其他的支持這種)。關(guān)于這個(gè)主題最老也使最相關(guān)的書是Kent的《Data and Reality》。