面向消息的中间件 (Message-Oriented Middleware, MOM)
http://docs.oracle.com/cd/E19148-01/820-0533/aeraq/index.html
由于業(yè)務(wù)、機(jī)構(gòu)和技術(shù)是不斷變化的,因此為其服務(wù)的軟件系統(tǒng)必須適應(yīng)這樣的變化。在合并、添加服務(wù)或擴(kuò)展可用服務(wù)之后,公司可能無力負(fù)擔(dān)重新創(chuàng)建信息系統(tǒng)所需的成本。正是在這個關(guān)鍵時刻,才需要集成新組件或者盡可能高效地擴(kuò)展現(xiàn)有組件。要集成異類組件,最方便的方法不是將它們重新創(chuàng)建為同類元素,而是提供一個允許它們進(jìn)行通信(不考慮它們之間的差異)的層。該層被稱作中間件,它允許獨立開發(fā)且運行于不同網(wǎng)絡(luò)平臺上的軟件組件(應(yīng)用程序、Enterprise Java Bean、Servlet 和其他組件)彼此交互。當(dāng)能夠進(jìn)行這樣的交互時,網(wǎng)絡(luò)才成為計算機(jī)。
如圖 1–1?所示,在概念上,中間件位于應(yīng)用程序?qū)优c平臺層(操作系統(tǒng)和底層網(wǎng)絡(luò)服務(wù))之間。
圖 1–1 中間件
分布于不同網(wǎng)絡(luò)節(jié)點上的應(yīng)用程序使用應(yīng)用程序接口進(jìn)行通信,而不必關(guān)心托管其他應(yīng)用程序的操作環(huán)境的細(xì)節(jié),也不必關(guān)心將它們連接到這些應(yīng)用程序的服務(wù)。此外,通過提供管理接口,可以使這個新的互連應(yīng)用程序虛擬系統(tǒng)安全可靠。可以對性能進(jìn)行度量和調(diào)整,也可以在不丟失任何功能的情況下進(jìn)行擴(kuò)展。
中間件可以劃分為以下幾類:
-
基于遠(yuǎn)程過程調(diào)用 (Remote Procedure Call, RPC) 的中間件,允許一個應(yīng)用程序中的過程調(diào)用遠(yuǎn)程應(yīng)用程序中的過程,就好像它們是本地調(diào)用一樣。該中間件實現(xiàn)一個查找遠(yuǎn)程過程的鏈接機(jī)制并使調(diào)用方能夠以透明方式使用這些過程。以前,這種類型的中間件處理基于過程的程序;現(xiàn)在,它還包括基于對象的組件。
-
基于對象請求代理 (Object Request Broker, ORB) 的中間件,使應(yīng)用程序的對象能夠在異類網(wǎng)絡(luò)之間分布和共享。
-
面向消息的中間件或基于 MOM 的中間件,使分布式應(yīng)用程序可以通過發(fā)送和接收消息來進(jìn)行通信和交換數(shù)據(jù)。
所有這些模型都使一個軟件組件可以通過網(wǎng)絡(luò)影響另一個組件的行為。它們的區(qū)別在于基于 RPC 和 ORB 的中間件會創(chuàng)建緊密耦合組件系統(tǒng),而基于 MOM 的系統(tǒng)允許組件進(jìn)行更松散的耦合。在基于 RPC 或 ORB 的系統(tǒng)中,一個過程調(diào)用另一個過程時,必須等待調(diào)用的過程返回才能執(zhí)行其他操作。正如前面所提到的,在這些模型中,中間件在一定程度上充當(dāng)超級鏈接程序,在網(wǎng)絡(luò)上查找被調(diào)用過程,并使用網(wǎng)絡(luò)服務(wù)將函數(shù)或方法參數(shù)傳遞到被調(diào)用過程,然后返回查找結(jié)果。
基于 MOM 的系統(tǒng)允許通過異步交換消息來進(jìn)行通信,如圖 1–2?所示。
圖 1–2 基于 MOM 的系統(tǒng)
面向消息的中間件使用消息傳送提供者來協(xié)調(diào)消息傳送操作。MOM 系統(tǒng)的基本元素是客戶端、消息和 MOM 提供者,后者包括 API 和管理工具。MOM 提供者使用不同的體系結(jié)構(gòu)路由和傳送消息:它可以使用集中式消息服務(wù)器,也可以將路由和傳送功能分布在每個客戶端上。某些 MOM 產(chǎn)品結(jié)合了這兩個方法。
使用 MOM 系統(tǒng),客戶端可以進(jìn)行 API 調(diào)用,以便將消息發(fā)送到由提供者管理的目的地。該調(diào)用會調(diào)用提供者服務(wù)以路由和傳送消息。在發(fā)送消息之后,客戶端會繼續(xù)執(zhí)行其他工作,并確信在接收方客戶端檢索該消息之前,提供者一直保留該消息。基于消息的模型與提供者的協(xié)調(diào)耦合在一起,使得創(chuàng)建松散耦合的組件系統(tǒng)成為可能。這樣的系統(tǒng)可以繼續(xù)可靠地工作,即使在有個別組件或連接失敗時也不會停機(jī)。
由消息傳送提供者協(xié)調(diào)客戶端之間的消息傳送的另一個優(yōu)點是:通過添加管理界面,可以監(jiān)視和調(diào)整性能。這樣,客戶端應(yīng)用程序便不必關(guān)心發(fā)送、接收和處理消息之外的任何問題。對于互操作性、可靠性、安全性、可伸縮性和性能之類的問題,應(yīng)當(dāng)由管理員通過編碼實現(xiàn) MOM 系統(tǒng)來解決。
至此,我們已經(jīng)介紹了使用面向消息的中間件連接分布式組件的很多優(yōu)點。下面將介紹其缺點。缺點之一源自松散耦合本身。在 RPC 系統(tǒng)中,只有在被調(diào)用函數(shù)完成任務(wù)之后,才能返回調(diào)用函數(shù)。在異步系統(tǒng)中,調(diào)用方客戶端會繼續(xù)為接收方裝入工作,直到處理裝入工作所需的資源耗盡且被調(diào)用組件發(fā)生故障。當(dāng)然,可以通過監(jiān)視性能和調(diào)整消息流來盡量減少或避免這些情況,但對于 RPC 系統(tǒng)卻不必這樣做。有一點很重要,那就是了解每種系統(tǒng)的優(yōu)缺點。每種系統(tǒng)所適合執(zhí)行的任務(wù)都不同。有時,您需要結(jié)合兩種系統(tǒng)才能完全獲得所需的行為。
圖 1–3?顯示 MOM 系統(tǒng)如何使兩個基于 RPC 的系統(tǒng)進(jìn)行通信。該圖的左側(cè)顯示在不同的網(wǎng)絡(luò)節(jié)點上分布客戶端、服務(wù)器和數(shù)據(jù)存儲庫組件以提高性能的應(yīng)用程序。這是一個折扣機(jī)票預(yù)定系統(tǒng):最終用戶為使用此服務(wù)支付一定的費用,使用該服務(wù)可以找到特定目的地和時間的最低費用。數(shù)據(jù)存儲庫保存有關(guān)注冊用戶和參與此折扣計劃的航空公司的信息。服務(wù)器上的邏輯功能根據(jù)用戶的請求在所參與的航空公司中查詢價格、對信息進(jìn)行排序并向用戶提供三個最低報價。該圖的右側(cè)展示了基于 RPC 的系統(tǒng),表示所參與的任一航空公司的機(jī)票/預(yù)定系統(tǒng)。該圖的右側(cè)將為折扣系統(tǒng)所連接到的任意多個航空公司進(jìn)行復(fù)制。對于每個這樣的航空公司,數(shù)據(jù)存儲庫都將保存有關(guān)可用航班的信息(座位、飛行時間和價格)。服務(wù)器組件將更新這些信息以響應(yīng)最終用戶輸入的數(shù)據(jù)。航空公司的服務(wù)器還訂閱 MOM 服務(wù),接收折扣預(yù)定系統(tǒng)的信息請求,并返回座位和價格信息。如果用戶決定購買 PanWorld 航空公司的折扣機(jī)票,則該系統(tǒng)的服務(wù)器組件將更新數(shù)據(jù)存儲庫中的信息,然后為請求者生成機(jī)票或者向折扣服務(wù)發(fā)送一條消息以生成機(jī)票。
圖 1–3 結(jié)合 RPC 和 MOM 系統(tǒng)
此示例說明 RPC 和 MOM 系統(tǒng)之間的一些區(qū)別。前面已經(jīng)提到了其中一個區(qū)別就是分布式組件耦合的方式。另一個區(qū)別是,RPC 系統(tǒng)通常用于分布和連接客戶端與服務(wù)器組件(在這些組件中,客戶端通常是最終用戶),而在 MOM 系統(tǒng)中,客戶端通常是只能通過消息傳送進(jìn)行交互操作的異構(gòu)軟件組件。
MOM 系統(tǒng)較為嚴(yán)重的問題是 MOM 作為專用產(chǎn)品來實現(xiàn)。如果您的公司依賴于 SuperMOM-X,但最近收購了一家使用 SuperMOM-Y 的公司,會出現(xiàn)什么情況?要解決此問題,需要一個標(biāo)準(zhǔn)的消息傳送接口。如果 SuperMOM-X 和 SuperMOM-Y 均實現(xiàn)了此接口,則針對一個系統(tǒng)開發(fā)的應(yīng)用程序也可以運行在另一個系統(tǒng)上。這樣的接口應(yīng)該易于學(xué)習(xí),同時提供足夠的功能來支持復(fù)雜的消息傳送應(yīng)用程序。1998 年推出的 Java 消息服務(wù) (Java Message Service, JMS) 規(guī)范就是為了實現(xiàn)這樣的目的。下一節(jié)將介紹 JMS 的基本功能,并說明包含現(xiàn)有專用 MOM 產(chǎn)品的通用元素的標(biāo)準(zhǔn)是如何制訂的。這些標(biāo)準(zhǔn)既允許差異存在,又使得進(jìn)一步發(fā)展成為可能。
http://blog.csdn.net/freezgw1985/article/details/5771956
總結(jié)
以上是生活随笔為你收集整理的面向消息的中间件 (Message-Oriented Middleware, MOM)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于构造器调用顺序
- 下一篇: 用shell将时间字符串与时间戳互转