簡介
通過管理流動在不同服務之間的請求和響應,IBM® WebSphere® 企業服務總線(以下簡稱為 WebSphere ESB)可實現不同系統的集成。中介模塊(mediation module)在 WebSphere Integration Developer 中創建,它封裝要在 WebSphere ESB 運行時內部署的服務交互邏輯。在中介模塊內,根據定義消息流邏輯的一個或多個中介原語,可以將消息增強、轉換、記錄和傳送到不同的服務提供者。消息本身以一種稱為服務消息對象(Service Message Object,SMO)的邏輯結構表示。
本文將不會對 WebSphere ESB V7 的每一個新特性和功能進行逐一介紹,也不會深入描述這些特性。本文將會介紹 WebSphere ESB V7 的一些新特性,包括增強的傳輸綁定、中介原語、中介模式和策略控制。要從本文中獲益,您應當具有一定的 WebSphere ESB 經驗以及關於其特性和功能的基本技術知識。
新的傳輸協議支持
在 WebSphere ESB 中,您可以通過導入調用現有服務,而使用導出將中介模塊公開給外部應用程序。導入和導出可以與傳輸特定的協議綁定相關聯,在 V7 以前的版本中,支持綁定包括 Web 服務、WebSphere MQ、Java™ Message Service (JMS)、WebSphere MQ JMS、HTTP 或服務組件體系結構(Service Component Architecture,SCA)。
EJB 綁定
在 V7 中,增強的 EJB 綁定為 EJB 導出以及已受支持的 EJB 導入提供支持。在您選擇導出並生成綁定時,您將看到選項的完整列表,其中包括 EJB 綁定:
圖 1. EJB 導出綁定
新的選項包括 EJB 綁定應該選擇 EJB 2.1 還是 EJB 3.0 兼容的能力。此外,您可以決定是否公開 EJB 作為本地 EJB、遠程 EJB 或二者兼有。一個向導將指導您完成整個過程,如下圖所示:
圖 2. EJB 導出綁定配置
消息綁定
JMS 和 WebSphere MQ 的消息綁定已有多項改進:
失敗事件管理器支持 — WebSphere ESB V6.2 引入了失敗事件管理器,使異步發送的失敗消息能夠得到集中處理和管理。在 V6.2 中 JMS 綁定支持失敗事件管理器,且在 V7 中增強了這種支持以便包括 WebSphere MQ 綁定。
動態響應目的地 — JMS 綁定有內置功能以動態生成新的目的地隊列來接收響應消息,這會在決定采用哪種設計方法時給您額外的靈活性。
WebSphere MQ 資源適配器支持 — 增強的 WebSphere MQ 綁定包括對 WebSphere MQ 資源適配器的支持,以便您可以利用已改進的故障轉移和負載平衡支持。
新增的中介原語支持
在 WebSphere ESB 中,中介的核心處理發生在中介流組件內,且被分成每個操作的中介流。這些流包含一些綁在一起的預建中介原語,用於完成所需處理。本部分描述的是 WebSphere ESB V7 中增強的預建中介原語。
Flow Order 原語
V7 已經引人了 Flow Order 原語,以使確定性分支能夠在中介流內啟動邏輯。在 V7 以前,如果您想為中介流設置分支,這些分支的執行順序是非確定性的。通過為每個分支創建獨立終端並單線連接到每一個分支,Flow Order 原語允許您定制分支邏輯。如下圖所示:
圖 3. Flow Order 中介原語
Gateway Endpoint Lookup 原語
WebSphere ESB V6.2 引入了服務網關功能,且作為部分連續驅動為服務網關模式提供一流的支持,在服務網關中,已添加的新原語專用於路由模式。此原語專注於 Web 服務端點解決方案且有三種不同的操作模式:
URL — 當惟一標識符在 URL 尾部可用時使用,用於提供服務標識信息,該信息可作為令牌來確定要將消息轉發到的端點地址。在這種操作模式下,配置數據存儲在內置的配置存儲區內(有關這種模式的更多信息,請參閱下面的 “代理網關” 部分)。
XPath — 允許您指定一個 XPath 表達式,在使用網關的所有服務中分解為一個惟一標識符。然後您可以使用這個標識符作為令牌來確定要將消息轉發到的端點地址。在這種操作模式下,配置數據存儲在內置存儲區內(有關這種模式的更多信息,請參閱下面的 “代理網關” 部分)。
操作 — 每個 Web 服務請求都有一個指定的 SOAPAction 值,如果被啟用,則是一個 Web 服務尋址(WS-Addressing)操作值。根據規范,該值應該是 “唯一並模糊地識別該消息所蘊含的語義的一個標識符”。對於通過原語傳送的每個消息,操作值的確定均來自 ServiceMessageObject,並且對 WebSphere Service Registry and Repository 進行查詢以查找具有相同操作值的 WSDL 端口。與 Endpoint Lookup 原語類似,您可以為這種模式的查找指定用戶定義的屬性和分類。
圖 4. Gateway Endpoint Lookup 原語
默認情況下,原語在 URL 模式下配置且無需額外配置。然而通常應該指定代理組,如下所述。如果需要 XPath 模式,除代理組配置以外還必須包含 XPath 表達式。最後,如果需要動作,與 WebSphere Service Registry and Repository(以下簡稱 WSRR)的通信是先決條件,因此如果默認值是不能接受的,則必須指定 WSRR 實例名稱。
一般情況下,在動態或靜態服務網關內使用基於動作的路由,URL 和 XPath 模式僅在代理網關模式下使用,如下所述。無論所使用的查找方法是什麼,ServiceMessageObject 內的目標、備用地址和端點查找上下文都會被填充到查找結果中。
Message Validator 原語
Message Validator 原語允許您針對架構信息驗證整個或部分服務消息對象。除了對接口架構的驗證以外,如果任何斷言已經通過原語(如 SetMessageType 原語)產生,那麼也要對這些斷言進行驗證。在圖 5 的示例中,消息在轉化之前經驗證。如果驗證失敗,則該流將無法阻止任何下游失敗。
圖 5. Message Validator 原語
Policy Resolution 原語
在引入中介策略之前,中介流僅能通過使用提升的屬性控制。從中介流提升的任何屬性都在管理控制台上可見且可供變更,以便變更流配置。任何對於這些提升的屬性的變更都會影響所有引用屬性的流,在已部署的應用程序內變更是永久的,直到該值在管理控制台上被再次改變。在 WebSphere ESB V6.2 中,任何可提升的屬性都可通過中介策略進行動態更新,但任何通過策略控制影響的變更僅有當前流調用的生存期。
可將提升的屬性看作是任何中介流內的變化點,使用中介策略定義在這些變化點上使用的值。中介策略使用 WS-Policy 格式,且在提升的屬性上有一個簡單的映射,即 WS-Policy 中使用的概念與那些通過 WebSphere ESB 定義的概念之間的映射。該功能支持創建隨正在處理的消息內容而變化的單一中介流。
在 WebSphere ESB V6.2 中,中介策略文檔只附屬於 WSRR 中的 SCA 模塊表示形式。WebSphere ESB V7 的新增特性能夠擴展這種附加中介策略文檔的支持到目標服務,支持基於轉發請求服務對中介流進行定制。Policy Resolution 原語現在有三種操作模式:
模塊 – 默認設置和與 V6.2 中相同的邏輯。
目標服務 – 基於 ServiceMessageObject 中指定的目標服務信息查找 WSRR 中的中介策略的能力(通過 Endpoint Lookup 原語自動填充)。
模塊與目標服務的交叉 – 這種模式能夠查詢與模塊和目標服務相關的中介策略信息的 WSRR。只有在中介策略符合以上兩種級別時此查詢才會成功,使流能夠從模塊和目標服務模式中尋求策略的一致性。
這些選項如下:
圖 6. Policy Resolution 原語
SLA Check 原語
在 WSRR V7 中,Governance Enablement Profile 為服務級別協議(Service Level Agreements)提供新的功能,這可以在客戶端、中介和服務(在 WebSphere ESB 術語中)之間啟用協議的創建。該協議表達式如下所示:
圖 7. SLA 類圖
服務級別定義(Service Level Definition,SLD)— 提供服務質量的正式規范,用於發送消息給服務並引用網絡可尋址端點。
服務版本 — 為功能性和非功能性規范提供引用相關 SLD 的服務功能的正式聲明。每個服務版本可能都有一個消費者標識符,該標識符在服務充當其他服務上的客戶端時使用。
服務級別協議(Service Level Agreement,SLA)— 對特定服務版本可能在其他已定義服務上含有的依賴項提供正式規范。這些依賴項表示為依賴於 SLDs 的一個 SLA。多個 SLA 可能與單一服務版本相關聯,因此一個 contextId 可能與每個 SLA 都相關聯,以選擇所需的 SLA。
在 WebSphere ESB 中,在客戶端、中介和供應商之間有三種模式。以下紅色部分強調的是通過 SLA 原語發送到 WSRR 的數據:
圖 8. 客戶端與中介之間的 SLA
圖 9. 客戶端與提供者之間的 SLA
圖 10. 中介與提供者之間的 SLA
SLA 中介原語允許您定義 SLA 檢查表達式,該表達式必須包括一個端點,可以選擇性包含一個上下文和/或消費者 ID。最終設置是注冊表名稱,用以識別哪個 WSRR 應該用於評估 SLA 檢查。
圖 11. SLA 中介原語面板
Trace 原語
在中介流開發期間,發布一個跟蹤消息到文件會很有用 — 標准 WebSphere ESB SystemOut.log 文件或另行指定的文件。為了啟用這個功能,新的 Trace 中介原語已經被添加到 WebSphere ESB V7 中。該原語有大量屬性,如下圖所示:
圖 12. Trace 中介原語面板
Enabled – 類似於其他原語,提供啟用或禁用原語功能的能力。這是一個可提升的屬性。
Destination — 指定添加跟蹤聲明的位置,即 Local Server Log (SystemOut.log)、User Trace (UserTrace.log) 或 File (User-defined)。
File Path — 在目標字段被指定為文件時,指定跟蹤文件的位置。
Message — 定義應該被跟蹤的消息格式:{0} = 時間戳、{1} = 消息 ID、{2} = 中介名、{3} = 模塊名、{4} = 通過根屬性定義的消息、{5} = SMO 的版本
Root path — 識別應該將 SMO 哪部分序列化到消息中的 XPath 表達式。也包括附加說明文本。
這個新原語的實現增強和簡化了現有跟蹤機制,且預計不會在更適合現有 MessageLogger 或 EventEmitter 原語的生產系統中使用,這些都是值得的。
UDDI 原語
統一描述、發現和集成(Universal Description Discovery and Integration,UDDI)是在網絡內發布和發現服務描述的標准。下面將要解釋 WSDL 與 UDDI 概念之間的映射,以便澄清 WebSphere ESB V7 提供的集成。
BusinessEntity – 提供關於業務的信息且包含一個或多個 BusinessServices。
BusinessService – 包含 Web 服務的技術和業務描述,類似於 WSDL 服務。
BindingTemplate – 類似於 WSDL 端口。
tModel – 定義服務的技術規范。雖然與 WSDL 部分沒有直接關聯,但是源自其服務接口部分。
UDDI 原語為與 UDDI 存儲庫(如 WebSphere Application Server UDDI)的集成提供一流的支持。細節部分描述對 UDDI 注冊表名稱及其相關查詢信息的配置。如果查找成功,則有關 SMO 的頭和上下文部分會被更新,這類似於 Endpoint Lookup 原語。這裡有三種可能的匹配策略:
返回第一個匹配端點並設置路由目標 — 目標地址被填充進頭部分,且與這個端點相關聯的相關注冊表信息被填充進 Endpoint Lookup 上下文。
返回所有匹配端點 — 雖然所有返回的端點信息都被填充進 Endpoint Lookup 上下文,但是沒有目標地址被填充進 SMO 頭部分。
返回所有匹配端點並設置備用路由目標 — 這類似於上面的情況,但是 SMO 頭的目標和其他部分都被填充。
Fail 原語增強
在 V7 中,Fail 原語已經增強,除以前可用的靜態字段之外,現在還支持動態消息生成。現在您可以使用以下的替代值來指定錯誤消息:
{0} – 時間戳值
{1} – SMO Message ID 值
{2} – 中介名值
{3} – 模塊名值
{4} – 在 Root Filed 字段內指定的 SMO 序列化部分
{5} – SMO 版本值
這些設置如下所示:
圖 13. Fail 原語面板
WSRR Query API
在 WebSphere ESB V7 以前,只有兩個內置機制與 WSRR 通信,它們是 Endpoint Lookup 和 Policy Resolution 原語。WebSphere ESB V7 中引入了新的查詢 API,它允許您在自定義中介內創建定制查詢並將其提交給 WSRR,同時利用內置緩存機制。
Endpoint Lookup 原語增強
以前,Endpoint Lookup 原語支持 Web 服務端點和 SCA 導出。現在,WebSphere ESB V7 添加了對以下協議的支持:
MQ 端點
JMS(SIB、MQ 和通用)端點
基於 SCA 的端點:MQ、JMS、Web 服務、SCA 和 HTTP
HTTP 端點
在原語中的新支持讓您可以查詢單一協議、所有協議或 Web 服務和 SCA 端點的現有行為,如下圖所示:
圖 14. Endpoint Lookup 原語面板
WebSphere ESB 的業務空間支持
業務空間是一個基於 Web 的接口,允許您控制和管理安裝在系統上的應用程序。主要用戶是那些想管理已安裝應用程序的 IT 和解決方案管理員。它被引入到 WebSphere ESB V6.2 中並讓您可以查看已部署的 SCA 模塊。在 V7 中,已經擴展的功能包括管理中介策略和代理網關。
代理網關支持
WebSphere ESB V6.2 支持服務網關的創建,在創建大量可能的網關模式時提供了巨大的靈活性。這種靈活性對增加解決方案的開發時間有副作用。WebSphere ESB V7 引入一種被稱為代理網關的新模式,以提供一種更快的開箱即用體驗。代理網關允許您創建帶有內置路由的 WebService 服務網關,以及可用於客戶端生成的已解析 WSDL。這裡是一個新代理網關的概念圖:
圖 15. 代理網關
一些已經被識別的服務提供者將通過網關公開,他們被邏輯地分成代理組,該代理組是一個服務集合。在代理網關開發期間,可建立鏈接到一個或多個代理組中。對於代理組內的每一個服務,相應的虛擬服務可在代理網關上公開,這樣就可以將服務請求從虛擬服務自動路由到現實服務,在中介流組件內完成任何網關邏輯。
一旦在 WebSphere Integration Developer 中開發出代理網關並在運行時安裝了該網關,IT/解決方案管理員就可以登錄業務空間並查看代理網關、代理組和虛擬服務之間的關系。圖 16 顯示代理網關小部件,其初步加載顯示了代理組和相關的代理網關:
圖 16. 顯示代理組與代理網關之間關系的代理網關 BusinessSpace 小部件
在代理組 pencil 上單擊轉換小部件,以顯示與代理組關聯的虛擬服務,如下圖所示:
圖 17. 在代理組內顯示虛擬服務的代理網關 BusinessSpace 小部件
中介策略支持
在業務空間內支持中介策略之後,就無需通過 WSRR 控制台創建和刪除中介策略。業務空間有三個相關的小部件:
服務浏覽器 – 允許您查看導入到 WSRR 的服務。這些服務可以有附加的中介策略,稍後會通過運行時執行。
模塊浏覽器 – 允許您查看已經在 WebSphere ESB 系統上安裝的模塊。
中介策略管理 – 一旦在相應小部件(模塊浏覽器或服務浏覽器)上選擇了服務或模塊,相關的中介策略將會顯示在中介策略管理小部件上。除了查看中介策略,您也可以創建和刪除策略。
在使用 WSRR 控制台時,這些新的小部件提供專用接口,此專用接口可刪除許多以前需要的通用 WS-Policy 步驟。接口用戶在定義中介策略時不需要對 WS-Policy 規范有太多了解。
圖 18. 模塊浏覽器 BusinessSpace 小部件
圖 19. 服務浏覽器 BusinessSpace 小部件
圖 20. 中介策略管理 BusinessSpace 小部件
管理和監控擴展
本部分描述 WebSphere ESB V7 上增強管理和監控特性的新功能。
業務空間內的服務監控
BusinessSpace 內的服務監控小部件為 SCA 模塊調用和公開的服務度量響應時間和請求吞吐量。您可選擇一些操作來監控公開給請求方(導出)並將其使用掉(導入)的服務,您可以選擇為響應時間和吞吐量定義阈值,從而為 SCA 模塊提供強大的開箱即用監控功能。這裡提供了一個輸出示例:
圖 21. BusinessSpace 內的服務監控小部件
此外,對於負載的多 SCA 模塊解決方案,這種功能會幫助您確定哪部分解決方案將消耗大部分時間。
業務空間內的健康和問題確定
管理解決方案的一個不可或缺的部分就是跟蹤整個系統的健康狀況,以及模塊中管理項目的健康狀況,如隊列、消息引擎、數據源、服務器和集群。模塊和系統健康小部件提供單一接口來快速檢查解決方案的狀態,以便驗證以下信息:
哪些應用程序正在運行
拓撲內哪些服務器被啟動、停止或不可用
已定義的隊列最大深度以及與該最大值的接近程度
哪些消息傳送引擎項目正在運行
模塊中任何失敗的事件
圖 22. BusinessSpace 內的系統健康小部件
跨組件跟蹤
跨組件跟蹤允許您通過 SCA 模塊和組件跟蹤消息。它添加了通過 WebSphere Integration Developer 中的查看器解析的標准輸出跟蹤語句。WebSphere ESB V7 中的這個新增特性能夠通過單個原語跟蹤消息的進度而不是簡單地停留在中介組件級別。下面是一個示例:
圖 23. 跨組件跟蹤
事件排序
在 WebSphere ESB V7 以前,事件排序僅限於 WebSphere Process Server 運行時,但是在 V7 中,事件排序包括在 WebSphere ESB V7 運行時中。事件排序能使 WebSphere ESB 組件按交付順序處理經過異步調用的事件。在整個方案中都保持事件順序。對於一些實現,您可以要求目標組件按源應用程序發送事件的相同順序處理事件;不按順序處理這些事件會導致錯誤或異常。在這些情況下,您可以對異步導出和 SCA 組件啟用事件排序來實現這些功能。
圖 24. 啟用事件排序