引言
自從 2005 年 12 月 IBM WebSphere Enterprise Service Bus (WebSphere ESB) 產(chǎn)品上市以來,就有人詢問以下問題:它與我們在以前的系列文章中描述的解決方案的關(guān)系如何——該解決方案基于 WebSphere Application Server V6(或更準(zhǔn)確地說,WebSphere Application Server V6 中的服務(wù)集成總線 (SIBus) 技術(shù))創(chuàng)建了 ESB。我們還收到咨詢以下內(nèi)容的問題:SIBus 和 WebSphere ESB 之間的關(guān)系是什么(特別是不同點是什么)?何時使用何種技術(shù)?有些人只想知道他們?nèi)绾问褂?WebSphere ESB 的功能來實現(xiàn)我們在以前文章中描述的 ESB 功能。最后,還有一些關(guān)于結(jié)合使用 WebSphere ESB 和另一 IBM 產(chǎn)品(即 WebSphere Process Server)的最佳實踐的問題。
ESB 的基本功能回顧
總的來說,ESB 通過一組豐富的功能,實現(xiàn)對應(yīng)用程序之間交互的管理和監(jiān)視,從而提供了在企業(yè)內(nèi)部和企業(yè)之間連接新的和現(xiàn)有軟件應(yīng)用程序的功能。ESB 支持服務(wù)可視化,從而在服務(wù)請求程序和服務(wù)提供程序之間提供了多方面的分離。在 developerWorks 上的其他文章中,可以找到 ESB 體系結(jié)構(gòu)模式及其組件的全面討論。
我們認(rèn)為哪些 ESB 功能是比較關(guān)鍵的?
首先,ESB 能夠通過以下各種方式與服務(wù)請求程序和服務(wù)提供程序交互:從持久性消息中樞(特別是 MQ)發(fā)送和接收消息,并能夠通過 HTTP 和 JMS發(fā)送和接收 Web 服務(wù)請求和響應(yīng)消息(支持諸如 Web Services Interoperability (WS-I) Basic Profile 1.1 之類的標(biāo)準(zhǔn))。我們首先重點討論使用 SOAP 和 XML 的基于標(biāo)準(zhǔn)的消息,但支持其他消息格式(如文本和二進(jìn)制文件)也非常重要。
其次,能夠在不同消息和傳輸協(xié)議之間轉(zhuǎn)換,如將 HTTP 上的 SOAP 轉(zhuǎn)換為 JMS 上的 SOAP。
然后,我們希望能夠使用流行的轉(zhuǎn)換語言 XSLT 轉(zhuǎn)換 XML 消息。
另一個基本功能是能夠應(yīng)用消息中介(如日志記錄)。此外,我們還經(jīng)常需要解決某些類型的基于上下文的動態(tài)路由問題。
我們需要關(guān)注的高級功能包括消息的監(jiān)視、在服務(wù)注冊中心中查詢端點和異步請求/響應(yīng)。
在以前的文章中,我們闡釋并實現(xiàn)了上面列出的許多關(guān)鍵項目,并在 WebSphere Application Server V6 中選擇了 SIBus 作為基礎(chǔ)平臺。在通用業(yè)務(wù)上下文中設(shè)置了所有示例,下面將回顧這些示例。對于閱讀了以前系列文章的人來說,這些新文章似乎有些相似之處,原因是我們將重新使用以前系列文章的場景和業(yè)務(wù)上下文,并向您展示如何在 WebSphere ESB 中實現(xiàn)這些相同的功能。
WebSphere ESB 的現(xiàn)有功能是什么——V6.0.2 中的新增功能是什么?
我們假定您已經(jīng)了解 WebSphere ESB 的一些基礎(chǔ)知識;并且在其他文章(請參見參考資料)中已經(jīng)詳細(xì)介紹了 WebSphere ESB 及其相關(guān)工具 (IBM WebSphere Integration Developer) 的基本體系結(jié)構(gòu)和功能。我們不介紹相同的背景知識,而是與您共享 WebSphere ESB 中我們認(rèn)為特別重要的內(nèi)容。
WebSphere ESB 非常重視標(biāo)準(zhǔn),可以對 XML 和 SOAP 提供一流的支持。我們喜歡這些標(biāo)準(zhǔn),因為在提供支持標(biāo)準(zhǔn)的工具和運行時情況下,它們可以使開發(fā)服務(wù)請求程序和提供程序簡單得多、而且速度更快。WebSphere ESB 利用策略 SCA/SDO 編程模型,其中重點通過工具啟用組件的(可視)程序集。WebSphere ESB 的核心是中介流組件,它是特定類型的 SCA 組件。SCA/SDO 編程模型正在標(biāo)準(zhǔn)化過程中,它可以在許多不同的組件類型中重新使用。例如,WebSphere Process Server 還支持 SCA 編程模型,并引入了許多組件類型,如業(yè)務(wù)流程和人工任務(wù)。根據(jù)相同的編程模型和關(guān)聯(lián)的工具,可以使 WebSphere ESB 與 WebSphere Process Server 組件輕松集成。
此外,我們需要 SDO 的擴(kuò)展——稱為服務(wù)消息對象(Service Message Objects,SMO)——它使我們能夠訪問所需的消息上下文和內(nèi)容,這是路由和其他 QoS 中介所需的。我們喜歡預(yù)先構(gòu)建的中介基元——例如,我們幾乎在每個項目中都使用 XSLT 中介基元。并且,當(dāng)我們需要使用不支持現(xiàn)成的 SOAP 或 XML 的現(xiàn)有系統(tǒng)時,WebSphere Adapters 可以為我們節(jié)省許多開發(fā)時間,因為可以將它們用作能夠“連接”到 WebSphere ESB 中介的另一個 SCA 組件類型。
而且,我們對在 12 月發(fā)布的 WebSphere ESB V6.0.2 的新功能和增強(qiáng)功能特別感興趣。WebSphere ESB 6.0.2 添加了一些關(guān)鍵功能,以便支持大量動態(tài)行為:
我們能夠以管理員身份在中介模塊上設(shè)置屬性和值,以便可以在運行時對此中介進(jìn)行控制。
在運行時, WebSphere Service Registry 和 Repository 中介基元可以查找目標(biāo)服務(wù)提供程序的端點地址;另外,也可以編寫自定義中介基元來查找和設(shè)置端點。
管理員可以在管理控制臺更改端點地址。
而且,在版本 6.0.2 中改進(jìn)了通過 WebSphere MQ SCA 本機(jī)綁定連接到 WebSphere MQ 的支持,還提供了對 JMS SCA 綁定的增強(qiáng),這樣使處理非 XML 數(shù)據(jù)變得更加容易。在 V6.0.2 中,還有更多選項,其中提供了一個用于管理的新中介基元,可以為 Common Event Infrastructure (CEI) 生成事件。 IBM Tivoli Composite Application Manager (ITCAM) for SOA 6.1 將在今年發(fā)布,它支持監(jiān)視 SCA 模塊,還提供以管理員身份啟用和禁用的 WebSphere ESB 中介基元。
最后一點也非常重要,對 WebSphere ESB 進(jìn)行了顯著的性能提升,并在 WebSphere Integration Developer V6.0.2 中進(jìn)行了可用性改進(jìn)。
業(yè)務(wù)場景回顧
在以前的系列文章中,我們介紹了示例業(yè)務(wù)場景以及 ESB 提供更好解決方案所面臨的挑戰(zhàn):我們的 ESB 場景基于稱為Posts-R-Us 的虛構(gòu)運輸公司,他們面臨的共同業(yè)務(wù)挑戰(zhàn)是涉及許多獨立的系統(tǒng),這些系統(tǒng)應(yīng)該彼此集成。集成這些系統(tǒng)將使他們能夠更快地適應(yīng)新的和改變的業(yè)務(wù)流程,而不需人工開發(fā)新的功能或不斷地開發(fā)集成邏輯。
現(xiàn)在,務(wù)必記住的是,業(yè)務(wù)級需求并不直接要求企業(yè)服務(wù)總線。我們假定 Posts-R-Us 決定開始構(gòu)建面向服務(wù)的體系結(jié)構(gòu) (SOA),以創(chuàng)建一組直接解決與業(yè)務(wù)相關(guān)問題的服務(wù)。ESB 提供了一個層次,在這一層次中,服務(wù)請求程序和服務(wù)提供程序之間的關(guān)系是間接的和分離的,這使得可以更好地分離關(guān)注點。換句話說,集成邏輯(例如,協(xié)議轉(zhuǎn)換、消息格式轉(zhuǎn)換等)與業(yè)務(wù)邏輯(即,服務(wù)執(zhí)行的實際功能)是分離的。ESB 可以提供虛擬服務(wù),以便能夠通過基于標(biāo)準(zhǔn)的服務(wù)接口來有效地包裝現(xiàn)有的應(yīng)用程序邏輯。因而,ESB 可以架設(shè)一座橋梁,以彌合業(yè)務(wù)問題(即,提供一組靈活的可以實現(xiàn)所需的業(yè)務(wù)流程的服務(wù))和現(xiàn)有 IT 環(huán)境(包含所有的協(xié)議、格式以及現(xiàn)有的遺留應(yīng)用程序)之間的差距。
對于本系列文章,我們將假設(shè)使用完全相同的業(yè)務(wù)場景,并且僅將其映射為實現(xiàn)的不同產(chǎn)品,即 WebSphere ESB。
WebSphere ESB 與 SIBus 的比較
什么是 SIBus?
SIBus 是基礎(chǔ) WebSphere Application Server 中服務(wù)集成功能的非正式名稱(也是 Websphere Application Server 管理控制臺上的鏈接)。了解 SIBus 的主要功能很有幫助,因為只有一種功能將來可用作由 WebSphere ESB 構(gòu)建的 ESB 的一部分:
SIBus 的核心是一個用 Java 編寫的完整 JMS V1.1 提供程序?qū)崿F(xiàn),支持使用 JDBC 兼容數(shù)據(jù)庫的持久性消息。在 WebSphere Application Server 中,SIBus 中的缺省 JMS 提供程序提供健壯的、基于 J2EE 的消息引擎,主要提供企業(yè)級服務(wù)質(zhì)量,如可靠性和高可用性。WebSphere ESB 使用此缺省 WebSphere JMS 提供程序來支持 JMS 連接性。
稱為 MQLink 的 SIBus 功能提供指向 MQ 隊列管理器的“鏈接”。對于 MQ,SIBus 相當(dāng)于另一個隊列管理器,對于SIBus,隊列管理器相當(dāng)于另一個 SIBus。此功能經(jīng)常與 WebSphere ESB 6.0.1 一起使用,以鏈接 MQ 系統(tǒng)——不過,在 WebSphere ESB 6.0.2 中,本機(jī) SCA MQ 綁定是連接 MQ 的首選方法。
SIBus 支持 Web 服務(wù)。WebSphere ESB 將 SCA 綁定用于不使用 SIBus 的 Web 服務(wù)。
SIBus 具有使用服務(wù)數(shù)據(jù)對象的中介編程模型;不過,它與 WebSphere ESB 中的 SCA 和 SMO 編程模型不同。
總之,在后續(xù)文章中,我們重點將 SIBus 用作 WebSphere Application Server 的缺省 JMS 提供程序,將不使用 SIBus 的其他功能。
術(shù)語“SIBus”實際上包括多個不同的部分,在將其與 WebSphere ESB 比較時,我們需要分別對它們進(jìn)行分析。在WebSphere Application Server 中,SIBus 的核心是消息傳遞基礎(chǔ)結(jié)構(gòu)和缺省的 JMS 提供程序,因此,在此基礎(chǔ)上構(gòu)建的每個 WebSphere 產(chǎn)品都使用此缺省的 JMS 提供程序進(jìn)行消息傳遞。而且,所謂的中介處理程序可以動態(tài)訪問消息。最后,稱為 MQLink 的功能支持 SIBus 和獨立 WebSphere MQ 環(huán)境之間的集成。考慮到這些后,讓我們看一看 WebSphere ESB 和 SIBus 之間的關(guān)系,特別是了解二者關(guān)聯(lián)的以下五種方式:
為構(gòu)建 ESB,WebSphere ESB 和 WebSphere Integration Developer 提供了 SIBus 沒有的功能
WebSphere Application Server/SIBus 將 JMS 提供程序用作 WebSphere ESB JMS 綁定的缺省 JMS 提供程序
SIBus 中介和 WebSphere ESB 中介之間的差異
將 SIBus MQLink 與 WebSphere ESB 一起使用
SIBus 和 WebSphere ESB 基礎(chǔ)結(jié)構(gòu)的共存和集成
WebSpher為構(gòu)建 ESB,WebSphere ESB 和 WebSphere Integration Developer 提供了 SIBus 沒有的功能
不過,在僅使用 SIBus 功能時,配置過程可能非常麻煩,需要多個手動步驟。而且,必須手動編碼中介(在 SIBus 中,稱為中介處理程序),而沒有任何工具支持。
由于 WebSphere ESB 是通過策略 SCA/SDO 編程模型構(gòu)建的,所以在 WebSphere Integration Developer 中有強(qiáng)大的工具,通過可視化的導(dǎo)入和導(dǎo)出接口結(jié)構(gòu)簡化了中介流組件的開發(fā)。而且,顧名思義,中介流組件本身包含一個流,該流描述當(dāng)消息通過 ESB 時如何對其進(jìn)行處理。WebSphere Integration Developer 提供另一個可視化工具來組裝中介流,從而讓您可以拖放預(yù)先構(gòu)建的中介基元,該中介基元構(gòu)成消息流經(jīng)的中介流組件。例如,一種中介基元支持通過 XSLT 樣式表進(jìn)行消息轉(zhuǎn)換,另一種中介基元支持通過流的消息的自動記錄。描述此工作方式的一篇好文章是 WebSphere Enterprise Service Bus 與 WebSphere Integration Developer 入門。您還可以構(gòu)建自已的自定義中介基元,使之包含工具中不再提供的特定邏輯。為 WebSphere Enterprise Service Bus 開發(fā)自定義中介 是一篇描述如何構(gòu)建自定義中介基元的文章。
SIBus 中介處理程序框架根本不支持對流進(jìn)行可視化建模的概念。可以回憶一下以前的系列文章,必須將處理程序創(chuàng)建為實現(xiàn)特定接口的普通 Java 類。沒有提供任何可視化工具,并且不存在任何預(yù)定義的處理程序。
此外,對于同步調(diào)用,WebSphere ESB 支持不同的交互模式與請求和響應(yīng)消息的自動關(guān)聯(lián),而對于為異步調(diào)用組件,則支持 SCA API,從而在請求和響應(yīng)之間提供回調(diào)機(jī)制和關(guān)聯(lián)。開發(fā)人員必須使用 SIBus 來自定義代碼異步支持和關(guān)聯(lián)邏輯。
因此,WebSphere ESB 和 WebSphere Integration Developer 的組合創(chuàng)建了功能強(qiáng)大的開發(fā)和運行時工具集,大大加快了 ESB 的開發(fā)速度,這是 SIBus 無法比擬的。
WebSphere Application Server/SIBus 將 JMS 提供程序用作 WebSphere ESB JMS 綁定的缺省 JMS 提供程序
WebSphere ESB 就像 WebSphere 家族中的許多其他產(chǎn)品一樣,是基于 WebSphere Application Server 構(gòu)建的。它使用 J2EE 運行時以及應(yīng)用服務(wù)器支持的其他功能;例如,支持集群的功能和工作負(fù)載管理。SIBus 是 WebSphere Application Server 的功能特征;因此,每個 WebSphere ESB 安裝也自動含有 SIBus 功能。
與 SCA 組件(例如 WebSphere ESB 中介流組件)通信的一種方式是使用 JMS 綁定。客戶機(jī)或請求程序通過 JMS 將消息發(fā)送到 ESB;而對于請求/響應(yīng)操作,則通過獨立 JMS 隊列接收響應(yīng)消息。WebSphere ESB 利用缺省 JMS 提供程序來提供 JMS 實現(xiàn)。因此可以這樣說,從 JMS 角度而言,WebSphere ESB 位于 SIBus JMS 提供程序之上并使用該提供程序,或者說 WebSphere ESB 和 SIBus 是互補(bǔ)的。注意,當(dāng)為 WebSphere ESB 創(chuàng)建 JMS 綁定時,WebSphere Integration Developer 工具會自動生成所需的 SIBus 構(gòu)件(如目的地等),從而使用對用戶透明的 JMS 提供程序。
SIBus 中介和 WebSphere ESB 中介之間的差異
如上所述,WebSphere ESB 和 SIBus 都提供中介功能。WebSphere ESB 可讓您開發(fā)自已的自定義中介基元,而 SIBus 則利用中介處理程序框架。但是一定要注意,二者的中介框架實現(xiàn)、API、包裝和管理模型是不同的。
幾乎在任何情況下中介都需要訪問消息本身,以便操作、記錄和轉(zhuǎn)換消息,不管在任何特定用例下,都是如此。SIBus 和 WebSphere ESB 將 SDO 用作通過總線的消息流的表現(xiàn)機(jī)制。對于 WebSphere ESB,使用稱為 Service Message Objects (SMO) 的 SDO 擴(kuò)展。因此,盡管消息的準(zhǔn)確表示形式在兩種技術(shù)中不同,但是訪問消息內(nèi)容所需的代碼類似。
在大多數(shù)情況下,從 SIBus 遷移到 WebSphere ESB(反之亦然)需手動執(zhí)行——遷移的復(fù)雜性取決于中介代碼執(zhí)行的內(nèi)容。在本系列的后續(xù)文章中,我們將向您介紹如何替換我們開發(fā)的現(xiàn)有中介處理程序,以便在使用 WebSphere ESB 時可以通過 SIBus 與自定義中介基元一起使用,我們還將討論遷移時的注意事項。
另外,SIBus 還提供非預(yù)構(gòu)建的中介處理程序,而 WebSphere ESB 附帶大量的中介基元,因此您可能根本不需要編寫自定義代碼。
將 SIBus MQLink 與 WebSphere ESB 一起使用
由于 SIBus 充當(dāng) WebSphere Application Server 的 JMS 提供程序,因此每當(dāng)需要 JMS 功能時,WebSphere ESB 可以重新使用它,您可以利用 SIBus 提供的其他功能輕松地將 WebSphere ESB 與現(xiàn)有 WebSphere MQ 環(huán)境集成。
SIBus 通過其 MQLink 功能提供到 WebSphere MQ 的連接,該連接使 SIBus 實例能夠像另一個隊列管理器一樣與 MQ 隊列管理器通信。這可以將消息從 MQ 客戶機(jī)發(fā)送到 MQ 隊列,然后將消息自動轉(zhuǎn)發(fā)到 SIBus 中的目的地。在此基礎(chǔ)上,通過 JMS 導(dǎo)出將消息發(fā)送到中介流組件。類似地,還可以從 WebSphere ESB/SIBus 中將消息發(fā)送到實際上是 MQ 隊列的目的地。
不過,使用此方法將 WebSphere ESB 與 WebSphere MQ 集成存在一些缺陷。開發(fā)人員必須熟悉和使用配置的 SIBus 資源,而且在 MQLink 支持的故障轉(zhuǎn)移的配置上還存在一些限制。
在 WebSphere ESB V6.0.2 中,添加了新的 MQ SCA 本地綁定,我們建議在 MQLink 上使用該綁定。
SIBus 和 WebSphere ESB 基礎(chǔ)結(jié)構(gòu)的共存和集成
最后一點是 WebSphere ESB 和 SIBus 可以共存,并且可以集成獨立的實例。如果您已經(jīng)具有現(xiàn)有 SIBus 環(huán)境,那么您可以通過消息引擎的配置將一個或多個 WebSphere ESB 實例遷移到該環(huán)境,并且通過外部總線鏈接跨計算單元進(jìn)行遷移。SIBus 和 WebSphere ESB 可以通過多個協(xié)議(例如通過 SOAP/HTTP 或 JMS)交換消息。您可以在不影響現(xiàn)有 SIBus 中介的情況下,通過中介流組件開始運行消息,并且每當(dāng)您做好準(zhǔn)備時,就可以將中介從 SIBus 遷移到 WebSphere ESB。