首先介紹消息中間件的原理,然后介紹了目前流行的消息中間件產品和一些開源實現。
中間件的定義
中間件(middleware)是基礎軟件的一大類,屬於可復用的軟件范疇。中間件在操作系統軟件,網絡和數據庫之上,應用軟件之下,總的作用是為處於自己上層的應用軟件提供運行於開發的環境,幫助用戶靈活、高效的開發和集成復雜的應用軟件。
IDC對中間件的定義為:中間件是一種獨立的系統軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源,中間件定位於客戶機服務器的操作系統之上,管理計算機資源和網絡通信。
因而中間件是指一類軟件,是基於分布式處理的軟件,最突出的特點是其網絡通信功能。也可認為中間件是位於平台和應用之間的通用服務,這些服務具有標准的程序接口和協議。針對不同的操作系統和硬件平台,可以有符合接口和協議的多種實現。
IDC對中間件的定義為:中間件是一種獨立的系統軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源,中間件定位於客戶機服務器的操作系統之上,管理計算機資源和網絡通信。
因而中間件是指一類軟件,是基於分布式處理的軟件,最突出的特點是其網絡通信功能。也可認為中間件是位於平台和應用之間的通用服務,這些服務具有標准的程序接口和協議。針對不同的操作系統和硬件平台,可以有符合接口和協議的多種實現。

消息中間件的原理
1、消息中間件簡單介紹
此類中間件是指利用高效可靠的消息傳遞機制進行平台無關的數據交流,並基於數據通信來進行分布式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環境下擴展進程間的通信。
消息中間件可以即支持同步方式,又支持異步方式。異步中間件比同步中間件具有更強的容錯性,在系統故障時可以保證消息的正常傳輸。異步中間件技術又分為兩類:廣播方式和發布/訂閱方式。由於發布/訂閱方式可以指定哪種類型的用戶可以接受哪種類型的消息,更加有針對性,事實上已成為異步中間件的非正式標准。目前主流的消息中間件產品有IBM的MQSeries,BEA的MessageQ和Sun的JMS等
消息中間件可以即支持同步方式,又支持異步方式。異步中間件比同步中間件具有更強的容錯性,在系統故障時可以保證消息的正常傳輸。異步中間件技術又分為兩類:廣播方式和發布/訂閱方式。由於發布/訂閱方式可以指定哪種類型的用戶可以接受哪種類型的消息,更加有針對性,事實上已成為異步中間件的非正式標准。目前主流的消息中間件產品有IBM的MQSeries,BEA的MessageQ和Sun的JMS等
2、消息中間件原理
面向消息的中間件(MOM),提供了以松散耦合的靈活方式集成應用程序的一種機制。它們提供了基於存儲和轉發的應用程序之間的異步數據發送,即應用程序彼此不直接通信,而是與作為中介的MOM通信。MOM提供了有保證的消息發送(至少是在盡可能地做到這一點),應用程序開發人員無需了解遠程過程調用(PRC)和網絡/通信協議的細節。
消息中間件利用高效可靠的消息傳遞機制進行平台無關的數據交流,並基於數據通信來進行分布式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環境下擴展進程間的通信。
消息中間件適用於需要可靠的數據傳送的分布式環境。采用消息中間件機制的系統中,不同的對象之間通過傳遞消息來激活對方的事件,完成相應的操作。發送者將消息發送給消息服務器,消息服務器將消息存放在若干隊列中,在合適的時候再將消息轉發給接收者。消息中間件能在不同平台之間通信,它常被用來屏蔽掉各種平台及協議之間的特性,實現應用程序之間的協同,其優點在於能夠在客戶和服務器之間提供同步和異步的連接,並且在任何時刻都可以將消息進行傳送或者存儲轉發,這也是它比遠程過程調用更進一步的原因。
消息中間件適用於需要可靠的數據傳送的分布式環境。采用消息中間件機制的系統中,不同的對象之間通過傳遞消息來激活對方的事件,完成相應的操作。發送者將消息發送給消息服務器,消息服務器將消息存放在若干隊列中,在合適的時候再將消息轉發給接收者。消息中間件能在不同平台之間通信,它常被用來屏蔽掉各種平台及協議之間的特性,實現應用程序之間的協同,其優點在於能夠在客戶和服務器之間提供同步和異步的連接,並且在任何時刻都可以將消息進行傳送或者存儲轉發,這也是它比遠程過程調用更進一步的原因。
如下圖所示,應用程序A與應用程序B通過使用 MOM 的應用程序編程接口(API)發送消息進行通信。

MOM將消息路由給應用程B,這樣消息就可以存在於完全不同的計算機上,MOM 負責處理網絡通信。如果網絡連接不可用,MOM會存儲消息,直到連接變得可用時,再將消息轉發給應用程序B。
靈活性的另一方面體現在,當應用程序A發送其消息時,應用程序B甚至可以不處於執行狀態。MOM將保留這個消息,直到應用程序B開始執行並試着檢索消息為止。這還防止了應用程序A因為等待應用程序B檢索消息而出現阻塞。 這種異步通信要求應用程序的設計與現在大多數應用程序不同,不過,對於時間無關或並行處理,它可能是一個極其有用的方法
靈活性的另一方面體現在,當應用程序A發送其消息時,應用程序B甚至可以不處於執行狀態。MOM將保留這個消息,直到應用程序B開始執行並試着檢索消息為止。這還防止了應用程序A因為等待應用程序B檢索消息而出現阻塞。 這種異步通信要求應用程序的設計與現在大多數應用程序不同,不過,對於時間無關或並行處理,它可能是一個極其有用的方法
消息中間件與分布式對象調用的比較
分布式對象調用,如CORBA,RMI和DCOM,提供了一種通訊機制,透明地在異構的分布式計算環境中傳遞對象請求,而這些對象可以位於本地或遠程機器。它通過在對象與對象之間提供一種統一的接口,使對象之間的調用和數據共享不再關心對象的位置、實現語言及所駐留的操作系統。這個接口就是面向對象的中間件。
盡管面向對象的中間件是一種很強大的規范被廣泛應用,但是面對大規模的復雜分布式系統,這些技術也顯示出了局限性:
1.同步通信:客戶發出調用后,必須等待服務對象完成處理並返回結果后才能繼續執行。
2.客戶和服務對象的生命周期緊密耦合:客戶進程和服務對象進程都必須正常運行,如果由於服務對象崩潰或網絡故障導致客戶的請求不可達,客戶會接收到異常。
為了解決這些問題,出現了面向消息的中間件,它較好地解決了以上的問題。
消息中間件作為一個中間層軟件,它為分布式系統中創建、發送、接收消息提供了一套可靠通用的方法,實現了分布式系統中可靠的、高效的、實時的跨平台數據傳輸。消息中間件減少了開發跨平台和網絡協議軟件的復雜性,它屏蔽了不同操作系統和網絡協議的具體細節,面對規模和復雜度都越來越高的分布式系統,消息中間件技術顯示出了它的優越性:
1.采用異步通信模式:發送消息者可以在發送消息后進行其它的工作,不用等待接收者的回應,而接收者也不必在接到消息后立即對發送者的請求進行處理;
2.客戶和服務對象生命周期的松耦合關系:客戶進程和服務對象進程不要求都正常運行,如果由於服務對象崩潰或者網絡故障導致客戶的請求不可達,客戶不會接收到異常,消息中間件能保證消息不會丟失。
盡管面向對象的中間件是一種很強大的規范被廣泛應用,但是面對大規模的復雜分布式系統,這些技術也顯示出了局限性:
1.同步通信:客戶發出調用后,必須等待服務對象完成處理並返回結果后才能繼續執行。
2.客戶和服務對象的生命周期緊密耦合:客戶進程和服務對象進程都必須正常運行,如果由於服務對象崩潰或網絡故障導致客戶的請求不可達,客戶會接收到異常。
為了解決這些問題,出現了面向消息的中間件,它較好地解決了以上的問題。
消息中間件作為一個中間層軟件,它為分布式系統中創建、發送、接收消息提供了一套可靠通用的方法,實現了分布式系統中可靠的、高效的、實時的跨平台數據傳輸。消息中間件減少了開發跨平台和網絡協議軟件的復雜性,它屏蔽了不同操作系統和網絡協議的具體細節,面對規模和復雜度都越來越高的分布式系統,消息中間件技術顯示出了它的優越性:
1.采用異步通信模式:發送消息者可以在發送消息后進行其它的工作,不用等待接收者的回應,而接收者也不必在接到消息后立即對發送者的請求進行處理;
2.客戶和服務對象生命周期的松耦合關系:客戶進程和服務對象進程不要求都正常運行,如果由於服務對象崩潰或者網絡故障導致客戶的請求不可達,客戶不會接收到異常,消息中間件能保證消息不會丟失。
消息中間件的傳遞模式
1. 點對點模型(PTP)
點對點模型用於消息生產者和消息消費者之間點到點的通信。消息生產者將消息發動到由某個名字標識的特定消費者。這個名字實際上對應於消息服務中的一個隊列(Queue),在消息傳動給消費者之前它被存儲在這個隊列中。隊列可以是持久的,以保證在消息服務出現故障時仍然能夠傳遞消息。
2. 發布-訂閱模型(Pub/Sub)
發布-訂閱模型用稱為主題(topic)的內容分層結構代替了PTP模型中的惟一目的地,發送應用程序發布自己的消息,指出消息描述的是有關分層結構中的一個主題的信息。希望接收這些消息的應用程序訂閱了這個主題。訂閱包含子主題的分層結構中的主題的訂閱者可以接收該主題和其子主題發表的所有消息。
下圖展示了發布和訂閱模型:
點對點模型用於消息生產者和消息消費者之間點到點的通信。消息生產者將消息發動到由某個名字標識的特定消費者。這個名字實際上對應於消息服務中的一個隊列(Queue),在消息傳動給消費者之前它被存儲在這個隊列中。隊列可以是持久的,以保證在消息服務出現故障時仍然能夠傳遞消息。
2. 發布-訂閱模型(Pub/Sub)
發布-訂閱模型用稱為主題(topic)的內容分層結構代替了PTP模型中的惟一目的地,發送應用程序發布自己的消息,指出消息描述的是有關分層結構中的一個主題的信息。希望接收這些消息的應用程序訂閱了這個主題。訂閱包含子主題的分層結構中的主題的訂閱者可以接收該主題和其子主題發表的所有消息。
下圖展示了發布和訂閱模型:

多個應用程序可以就一個主題發布和訂閱消息,而應用程序對其他人仍然是匿名的。MOM 起着代理(broker)的作用,將一個主題已發表的消息路由給該主題的所有訂閱者。
簡單介紹WebLogic的特點
WebLogic是BEA公司實現的基於工業標准的J2EE應用服務器,支持大多數企業級JavaAPI,它完全兼容JMS規范,支持點到點和發布/訂閱消息模式,它具有以下一些特點:
1) 通過使用管理控制台設置JMS配置信息;
2) 支持消息的多點廣播;
3) 支持持久消息存儲的文件和數據庫;
4) 支持XML消息,動態創建持久隊列和主題。
1) 通過使用管理控制台設置JMS配置信息;
2) 支持消息的多點廣播;
3) 支持持久消息存儲的文件和數據庫;
4) 支持XML消息,動態創建持久隊列和主題。