Java Message Service 介紹

我是否應該學習本教程 第 1 頁(共2 頁)


本教程提供了對 Java Message Service (JMS)的概述,並提供了用它開發程序的一些基礎知識。JMS 是由 Sun Microsystems 開發的,它爲 Java 程序員提供一種訪問企業消息系統的方法,即 面向消息的中間件 (MOM)。MOM 通過中間媒介以間接方式在應用程序之間異步傳送數據,用這種方法提供一種以鬆散耦合的靈活方式集成應用程序的機制。

在開始學習本教程之前,讀者應該熟悉 Java 編程和麪向對象編程的概念。

編寫在本教程中描述的程序需要一個編輯環境,它可以是像操作系統編輯器這樣的基本編譯環境。在進行開發時,許多人使用集成開發環境(IDE),因爲它有專門爲編寫和測試代碼而設計的調試程序和其他特性。

編寫這些程序需要 Java 編譯器(javac.exe),還需要 javax.jms 包中的 JMS 類和 javax.naming 包中的 Java Naming and Directory Interface (JNDI)類。可以從 Sun 下載它們:JMSJNDI

要執行並測試這些程序,需要訪問 JMS 的供應商實現。大多數 Java 2 Enterprise Edition (J2EE)供應商都會提供 JMS 的一種實現。要想獲得設置 JMS 運行時程序和執行程序的有關信息,請參閱供應商文檔。

有些編程決定將取決於所使用的 JMS 版本(請參閱 JMS 1.1 中的新內容:統一域)。 JMS 版本 1.1 是爲了向後兼容性才而支持 點對點接口Pub/sub 接口,如果使用基於 JMS 版本 1.1 的供應商進行絕對全新的程序開發,則完全可以跳過本教程中有關這些主題的章節。

Java Message Service 是由 Sun Microsystems 開發的,它爲 Java 程序提供一種訪問 企業消息系統 的方法。在討論 JMS 之前,我們分來析一下企業消息系統。

企業消息系統,即 面向消息的中間件(MOM),提供了以鬆散耦合的靈活方式集成應用程序的一種機制。它們提供了基於 存儲和轉發 的應用程序之間的異步數據發送,即應用程序彼此不直接通信,而是與作爲中介的 MOM 通信。

MOM 提供了有保證的消息發送(至少是在儘可能地做到這一點),應用程序開發人員無需瞭解遠程過程調用(PRC)和網絡/通信協議的細節。

消息靈活性 第 2 頁(共8 頁)


如下圖所示,應用程序 A 與應用程序 B 通過使用 MOM 的應用程序編程接口(API)發送消息進行通信。

消息靈活性

MOM 將消息路由給應用程序 B,這樣,消息就可以存在於完全不同的計算機上,MOM 負責處理網絡通信。如果網絡連接不可用, MOM 會存儲消息,直到連接變得可用時,再將消息轉發給應用程序 B。

靈活性的另一方面體現在,當應用程序 A 發送其消息時,應用程序 B 甚至可以不處於執行狀態。MOM 將保留這個消息,直到應用程序 B 開始執行並試着檢索消息爲止。這還防止了應用程序 A 因爲等待應用程序 B 檢索消息而出現阻塞。

這種異步通信要求應用程序的設計與現在大多數應用程序不同,不過,對於時間無關或並行處理,它可能是一個極其有用的方法。

企業消息系統的真正威力在於應用程序的 鬆散耦合。在前一頁的圖表中,由應用程序 A 發送消息指定一個特定目標,如“訂單處理”。而現在,是由應用程序 B 提供訂單處理功能。

但是在將來,我們可以用不同的訂單處理程序替換應用程序 B,應用程序 A 將不再是明智之選。替換應用程序將繼續發送消息完成“訂單處理”,而消息也仍將得到處理。

同樣,我們也可以替換應用程序 A,只要替換應用程序繼續發送消息進行“訂單處理”,訂單處理程序就無需知道是否有一個新的應用程序在發送訂單。

最初,開發企業消息系統是爲了實現 點對點模型 (PTP),由一個應用程序生成的每個消息都由另一個應用程序接收。近年來,出現了一種新的模型,叫做 發佈與訂閱 (或者 pub/sub)。

Pub/sub 用稱爲 主題(topic) 的內容分層結構代替了 PTP 模型中的惟一目的地,發送應用程序 發佈 自己的消息,指出消息描述的是有關分層結構中的一個主題的信息。

希望接收這些消息的應用程序 訂閱了 這個主題。訂閱包含子主題的分層結構中的主題的訂閱者可以接收該主題和其子主題發表的所有消息。

下圖展示了發佈和訂閱模型。

發佈和訂閱模型

多個應用程序可以就一個主題發佈和訂閱消息,而應用程序對其他人仍然是匿名的。MOM 起着 代理(broker) 的作用,將一個主題已發表的消息路由給該主題的所有訂閱者。


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章