消息中間件(message oriented middleware)是指支持與保障分佈式應用程序之間同步/異步收發消息的中間件。消息是分佈式應用之間進行數據交換的基本信息單位,分佈式應用程序 之間的通訊接口由消息中間件提供。其中,異步方式指消息發送方在發送消息時沒必要知道接收方的狀態,更無需等待接收方的回覆,而接收方在收到消息時也沒必要知 道發送方的目前狀態,更無需進行同步的消息處理,它們之間的鏈接徹底是鬆耦合的,通訊是非阻塞的,這種異步通訊方式是由消息中間件中的消息隊列及其服務機 制保障的。通常地,實時性要求較高的業務採用同步方式處理,實時性要求不高的業務採用異步方式進行處理。消息中間件已普遍應用於各種分佈式應用系統中。
消息起源於分佈式操做系統進程通訊模型和分佈式應用互操做技術的研究。1980年代,隨着開放系統互連參考模型OSI的興起,做爲開放系統網絡模式中底層 的包交換通訊範型的一種天然擴充,分佈式系統消息機制的研究和應用獲得極大的發展,而統一處理消息發送、接收和管理的消息中間件的概念和平臺開始出現。 1980年代後期,IBM公司推出了消息中間件產品MQSeries,成爲消息中間件成熟的一個標誌。
進入1990年代,因爲應用需求的推進,消息中間件技術獲得極大的發展,並在世界範圍內涌現出大量的消息中間件產品。爲了有助於消息中間件技術的傳播,由 衆多消息中間件廠商、用戶和諮詢機構組成了消息中間件協會(MOMA),MOMA是一個非盈利機構,旨在推進消息技術在跨平臺、跨層次的分佈計算中的普遍 應用。國際對象管理組織(Object Management Group,簡稱OMG)制定了公共對象服務標準(Common Object Service Specifiaction,簡稱COSS),其中對消息服務進行了規範。
進入21世紀,消息中間件技術獲得進一步的發展。在規範化方面,因爲J2EE技術的普遍應用,J2EE的消息服務規範JMS(Java Message Service)獲得消息中間件廠商的普遍採納,並逐漸成爲消息中間件的事實標準,與此同時,Web服務技術的興起,與Web服務相關的標準體系獲得發展,在消息方面,W3C組織定義了Web服務的可靠消息傳送規範(WS-ReliableMessaging)。
目前,企業信息系統開始從部門級應用向企業級、跨企業集成的方向轉變,在這一過程當中,傳統的消息中間件體系架構也暴露出它的侷限性。傳統的消息中間件一般 採用點對點的消息傳輸結構,即在發送方對消息進行打包時須要顯明地標註接收方的地址。所以,儘管消息的接收方和發送方是鬆耦合鏈接的,相互通訊沒必要保持同 步,但因爲在消息中必須綁定接收方地址,致使在廣域、大型應用系統中使用消息中間件不夠靈活,系統擴展比較困難。爲了增長消息發送方和接收方之間對地址的 透明性,1990年代末期之後,消息中間件開始向發佈/訂閱架構轉變,併成爲企業應用集成中間件的一種核心機制,而基於發佈/訂閱架構的消息中間件一般稱 爲發佈/訂閱消息中間件(Publish/Subscribe Middleware,簡稱P/S MOM)或消息代理(Message Broker),以與傳統的消息中間件相區別。目前比較典型的消息中間件包括IBM WebSphere MQSeries、Tibco TIB/Rendezvous和Microsoft MSMQ等。
傳統的點對點消息中間件一般由消息隊列服務、消息傳遞服務、消息隊列和消息應用程序接口API組成,其典型的結構如圖6.1所示。html
消息中間件的基本工做原理爲:在消息發送方,消息發送者調用發送消息的API函數,將須要發送的消息經消息隊列服務存儲到發送消息隊列中;經過雙方消息傳 遞服務之間的交互,經消息隊列服務將須要發送的消息從發送隊列取出,並送到接收方;接收方再經它的消息隊列服務將接收到的消息存放到它的接收消息隊列中; 在消息接收方,消息接收者調用接收消息的API函數,一樣通過消息隊列服務,將須要的消息從接收隊列中取出,並進行處理。消息在發送或接收成功後,消息隊 列服務將對相應的消息隊列進行管理。
在基於消息代理的分佈式應用系統中,消息的發送方稱爲出版者,消息的接收方稱爲訂閱者,不一樣的消息經過不一樣的主題進行區分。出版者向消息代理出版其餘應用 系統感興趣的消息,而訂閱者從消息代理接收本身感興趣的消息,出版者和訂閱者之間經過消息代理進行關聯。消息代理的基本結構如圖6.2所示。
消息代理具備很好的靈活性和可擴展性,並支持主動、實時的信息傳遞方式,當消息發佈者有動態更新的數據產生時,消息代理會經過事件的發佈主動通知消息訂閱 者存在新的數據可用,而無需消息訂閱者進行頻度沒法肯定的查詢。消息代理適合於具備實時性、異步性、異構性、動態性和鬆耦合的應用需求。
消息代理的工做原理爲:消息發佈者和訂閱者分別同消息代理進行通訊。消息發佈者將包含主題的消息發佈到消息代理;消息訂閱者向消息代理訂閱本身感興趣的主 題。消息代理對雙方的主題進行匹配後,不斷將訂閱者感興趣的消息推(Push)給訂閱者,直到訂閱者向消息代理髮出取消訂閱的消息。
消息代理實現了發佈者和訂閱者在時間、空間和流程三個方面的解耦:
數據庫
從消息中間件的基本功能來看,不管是點對點消息中間件仍是消息代理,其體系結構都是很是清晰簡單的。但因爲分佈式應用及其環境的多樣性和複雜性,致使了消息中間件的複雜性。
消息中間件的複雜性主要體如今下面幾個方面:
緩存
消息的表示 消息一般由消息頭和消息體兩部分組成。消息頭用於描述消息發送者和接收者的地址或消息主題,以及消息的服務質量要求,例如,消息傳輸的時限、優先級、安全屬性等;消息體用於描述消息中具體攜帶的信息內容。目前多采用XML做爲消息表示的格式。
消息隊列 爲了有效控制消息收發過程而在消息中間件中內置的存儲消息的數據結構。因爲消息多采用先進先出的控制方式,所以,一般採用隊列做爲消息的存儲結構。從消息 的內容來看,消息能夠分爲發送消息隊列、接收消息隊列、死信隊列(沒法投遞或過時的消息構成隊列)。消息隊列也能夠按消息發送的質量要求進一步細分,如將 優先級高的隊列組織成一個優先隊列,以便於處理。從隊列存儲介質來看,消息隊列通常分爲持久消息隊列、內存隊列和高速緩存隊列。
安全
消息路由 消息路由借用了IP層的路由和路由器中的路由的概念,但不一樣之處在於:消息路由屬於應用層的概念。它是爲了保證應用之間的消息交換處於可控的狀態而設計的 軟件功能模塊,其機制是按照消息路由規則將消息從發送者傳送到目標應用,並提供消息流量控制功能。所以,消息路由有時也稱爲「流量控制」、「基於內容的路 由」、「智能路由」。
消息QoS機制 服務質量(Quality of Service,簡稱QoS)是指與用戶對服務滿意程度相關的各類性能效果。消息QoS機制是指消息中間件提供的消息傳送過程當中在性能、安全、可靠性等方面的各類非功能型需求約束。消息中間件一般具備如下幾種Qos特性:
服務器
代理化、服務化、流程化、平臺化是目前消息中間件發展的主要趨勢。代理化是指消息中間件體系架構逐漸向消息代理架構靠攏;服務化是指消息中間件在應用高端 支持面向服務的體系架構;流程化是指消息中間件在應用形態上逐漸與業務流程管理機制相融合,成爲企業應用集成中間件的一個核心組成部件;而平臺化是指圍繞 消息處理,各類應用開發和管理工具與消息中間件有機結合在一塊兒,爲分佈式應用的消息處理提供一個有機的統一平臺。網絡