消息中間件原理及JMS簡介之一
作者:orangelizq
摘要:
現今,越來越多的企業面臨著各種各樣的數據集成和系統整合,CORBA、DCOM、RMI等RPC中間件技術也應運而生,但由于采用RPC同步處理技術,在性能、健壯性、可擴展性上都存在著諸多缺點。而基于消息的異步處理模型采用非阻塞的調用特性,發送者將消息發送給消息服務器,消息服務器在合適的時候再將消息轉發給接收者;發送和接收是異步的,發送者無需等待,二者的生命周期也可以不必相同,而且發送者可以將消息間接傳給多個接收者,大大提高了程序的性能、可擴展性及健壯性,這使得異步處理模型在分布式應用上比起同步處理模型更具有吸引力。[5]
本文首先介紹了消息中間件的原理,然后介紹了目前流行的消息中間件產品和一些開源實現。最后詳細分析了SUN及其伙伴公司提出的旨在統一各種消息中間件系統接口的規范(JMS)。
關鍵字:消息中間件,JMS,點對點,發布/訂閱
一、中間件簡介
1.1 中間件的定義
中間件(middleware)是基礎軟件的一大類,屬于可復用的軟件范疇。中間件在操作系統軟件,網絡和數據庫之上,應用軟件之下,總的作用是為處于自己上層的應用軟件提供運行于開發的環境,幫助用戶靈活、高效的開發和集成復雜的應用軟件。[1]
IDC對中間件的定義為:中間件是一種獨立的系統軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源,中間件定位于客戶機服務器的操作系統之上,管理計算機資源和網絡通信。
因而中間件是指一類軟件,是基于分布式處理的軟件,最突出的特點是其網絡通信功能。也可認為中間件是位于平臺和應用之間的通用服務,這些服務具有標準的程序接口和協議。針對不同的操作系統和硬件平臺,可以有符合接口和協議的多種實現。[1]

圖1.1 中間件
1.2 中間件的分類
按照IDC的分類方法,中間件可分為六類:[1]
1) 終端仿真/屏幕轉換
2) 數據訪問中間件(UDA)
3) 遠程過程調用中間件(RPC)
4) 消息中間件(MOM)
5) 交易中間件(TPM)
6) 對象中間件
然而在實際應用中,一般將中間件分為兩大類:一類是底層中間件,用于支撐單個應用系統或解決一類問題,包括交易中間件、應用服務器、消息中間件、數據訪問中間件等;另一類是高層中間件,更多的用于系統整合,包括企業應用集成中間件、工作流中間件、門戶中間件等,他們通常會與多個應用系統打交道,在系統中層次較高,并大多基于前一類的底層中間件運行。
1.2.1 終端仿真/屏幕轉換
此類中間件用于實現客戶機圖形用戶接口與已有的字符接口方式的服務器應用程序之間的互操作,應用與早期的大型機系統,現在已很少使用。
1.2.2 數據訪問中間件
此類中間件是為了建立數據應用資源互操作的模式,對異構環境下的數據庫或文件系統實現聯接。
1.2.3 遠程過程調用中間件
此類中間件可以使開發人員在需要時調用位于遠端服務器上的過程,屏蔽了在調用過程中的通信細節。一個應用程序使用RPC來遠程執行一個位于不同地址空間里的過程,在效果上看和執行本地調用相同。
1.2.4 交易中間件
此類中間件是專門針對聯機交易系統而設計的。聯機交易系統需要處理大量并發進程,處理并發涉及到操作系統,文件系統,編程語言,數據通信,數據庫系統,系統管理,應用軟件等。而交易中間件根據分布式交易處理的標準及參考模型,對資源管理,交易管理和應用進行了實現,從而使得基于交易中間件開發應用程序更為簡單。交易中間件基本上只適用于聯機交易系統,是一種較為專用的中間件。
1.2.5 消息中間件
此類中間件是指利用高效可靠的消息傳遞機制進行平臺無關的數據交流,并基于數據通信來進行分布式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環境下擴展進程間的通信。
消息中間件可以即支持同步方式,又支持異步方式。異步中間件比同步中間件具有更強的容錯性,在系統故障時可以保證消息的正常傳輸。異步中間件技術又分為兩類:廣播方式和發布/訂閱方式。由于發布/訂閱方式可以指定哪種類型的用戶可以接受哪種類型的消息,更加有針對性,事實上已成為異步中間件的非正式標準。目前主流的消息中間件產品有IBM的MQSeries,BEA的MessageQ和Sun的JMS等[1]。
1.2.6 對象中間件
傳統的對象技術通過封裝、繼承及多態提供了良好的代碼重用功能。但這些對象只存在與一個程序中,外界并不知道它們的存在,也無法訪問它們。對象中間件提供了一個標準的構建框架,能使不同廠家的軟件通過不同的地址空間,網絡和操作系統實現交互訪問。對象中間件的目標是為軟件用戶及開發者提供一種應用級的即插即用的互操作性。目前主流的對象中間件有OMG的CORBA,Microsoft 的COM以及IBM的SOM,Sun的RMI等。
1.3 中間件的特點
一般來講,中間件具有以下一些特點:滿足大量應用的需求,運行于多種硬件和操作系統平臺,支持分布式計算,支持標準接口和協議。開發人員通過調用中間件提供的大量API,實現異構環境的通信,從而屏蔽異構系統中復雜的操作系統和網絡協議。
由于標準接口對于可移植性和標準協議對于互操作性的重要性,中間件已成為許多標準化工作的主要部分。分布式應用軟件借助中間件可以在不同的技術之間共享資源。
總的來說,中間件屏蔽了底層操作系統的復雜性,使程序開發人員面對一個簡單而統一的開發環境,減少了程序設計的復雜性,將注意力集中與自己的業務上,不必再為程序在不同軟件系統上的移植而重復工作,從而大大減少了技術上的負擔。
二、消息中間件原理
面向消息的中間件(MOM),提供了以松散耦合的靈活方式集成應用程序的一種機制。它們提供了基于存儲和轉發的應用程序之間的異步數據發送,即應用程序彼此不直接通信,而是與作為中介的MOM通信。MOM提供了有保證的消息發送(至少是在盡可能地做到這一點),應用程序開發人員無需了解遠程過程調用(PRC)和網絡/通信協議的細節。
2.1 消息中間件簡介
消息中間件利用高效可靠的消息傳遞機制進行平臺無關的數據交流,并基于數據通信來進行分布式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環境下擴展進程間的通信。
消息中間件適用于需要可靠的數據傳送的分布式環境。采用消息中間件機制的系統中,不同的對象之間通過傳遞消息來激活對方的事件,完成相應的操作。發送者將消息發送給消息服務器,消息服務器將消息存放在若干隊列中,在合適的時候再將消息轉發給接收者。消息中間件能在不同平臺之間通信,它常被用來屏蔽掉各種平臺及協議之間的特性,實現應用程序之間的協同,其優點在于能夠在客戶和服務器之間提供同步和異步的連接,并且在任何時刻都可以將消息進行傳送或者存儲轉發,這也是它比遠程過程調用更進一步的原因。
如下圖所示,應用程序A與應用程序B通過使用 MOM 的應用程序編程接口(API)發送消息進行通信。

MOM將消息路由給應用程B,這樣消息就可以存在于完全不同的計算機上,MOM 負責處理網絡通信。如果網絡連接不可用,MOM會存儲消息,直到連接變得可用時,再將消息轉發給應用程序B。
靈活性的另一方面體現在,當應用程序A發送其消息時,應用程序B甚至可以不處于執行狀態。MOM將保留這個消息,直到應用程序B開始執行并試著檢索消息為止。這還防止了應用程序A因為等待應用程序B檢索消息而出現阻塞。 這種異步通信要求應用程序的設計與現在大多數應用程序不同,不過,對于時間無關或并行處理,它可能是一個極其有用的方法。
2.2 消息中間件與分布式對象調用的比較
分布式對象調用,如CORBA,RMI和DCOM,提供了一種通訊機制,透明地在異構的分布式計算環境中傳遞對象請求,而這些對象可以位于本地或遠程機器。它通過在對象與對象之間提供一種統一的接口,使對象之間的調用和數據共享不再關心對象的位置、實現語言及所駐留的操作系統。這個接口就是面向對象的中間件。
盡管面向對象的中間件是一種很強大的規范被廣泛應用,但是面對大規模的復雜分布式系統,這些技術也顯示出了局限性:
1.同步通信:客戶發出調用后,必須等待服務對象完成處理并返回結果后才能繼續執行。
2.客戶和服務對象的生命周期緊密耦合:客戶進程和服務對象進程都必須正常運行,如果由于服務對象崩潰或網絡故障導致客戶的請求不可達,客戶會接收到異常。
為了解決這些問題,出現了面向消息的中間件,它較好地解決了以上的問題。
消息中間件作為一個中間層軟件,它為分布式系統中創建、發送、接收消息提供了一套可靠通用的方法,實現了分布式系統中可靠的、高效的、實時的跨平臺數據傳輸。消息中間件減少了開發跨平臺和網絡協議軟件的復雜性,它屏蔽了不同操作系統和網絡協議的具體細節,面對規模和復雜度都越來越高的分布式系統,消息中間件技術顯示出了它的優越性:
1.采用異步通信模式:發送消息者可以在發送消息后進行其它的工作,不用等待接收者的回應,而接收者也不必在接到消息后立即對發送者的請求進行處理;
2.客戶和服務對象生命周期的松耦合關系:客戶進程和服務對象進程不要求都正常運行,如果由于服務對象崩潰或者網絡故障導致客戶的請求不可達,客戶不會接收到異常,消息中間件能保證消息不會丟失。
Author: orangelizq
email: orangelizq@163.com
posted on 2008-01-27 16:10
桔子汁 閱讀(13775)
評論(7) 編輯 收藏 所屬分類:
J2EE