簡介
「Java 傳訊系統 (JMS)」提供在整體企業中以非同步方式傳達商業資料和事件的跨平台標準。通訊通常會跨越流程和機器。應用程式中的物件(通常在不同機器上執行)會透過 JMS 定義的一套標準的介面,存取訊息導向中介軟體 (MOM)
的服務來彼此溝通。
JMS 提供一組介面來隔離 Java 程式設計師(實作訊息生產者和消費者)與 MOM 提供者。
這個內容頁描述 JMS 的主要概念和一般用途。
訊息
訊息是自行包含的商業資料套件。劃分為三個部分:
-
標頭:包含網路遞送資訊和訊息 ID。
-
屬性:包含訊息的 Meta 資料。JMS 規定一些屬性,但應用程式設計師也可以加入自己的屬性。
-
內容:包含實際的商業資料。內容完全由應用程式設計師掌控。
在 JMS 中,訊息封裝在實作 javax.jms.Message 介面的物件中。Java 程式可透過此介面來存取組成部分,如下圖所示。內容有多種形式,稍後討論。
標頭包含絕對要存在的訊息屬性。標頭有下列屬性:
-
MessageID
-
Timestamp
-
CorrelationID
-
ReplyTo
-
Destination
-
DeliveryMode
-
Redelivered
-
Type
-
Expiration
-
Priority
應用程式設計師可以利用屬性來提供訊息的 Meta 資料。屬性由一組任意的名稱值組所組成。
JMS 支援六種內容:
-
文字訊息
-
物件訊息
-
位元組訊息
-
對映訊息
-
串流訊息
-
訊息(沒有內文)
內容類型反映在介面延伸 javax.jms.Message 的類別階層中。下列類別圖中顯示常用的文字、物件及位元組訊息。文字訊息通常是 XML 資料的傳送媒介。
目的地
JMS 定義目的地的概念。訊息會傳送至目的地,也由目的地接收。目的地有兩種:
佇列是只有一個接收端處理訊息時所使用的訊息目的地。想像訊息就好像傳送傳統郵件一樣,則佇列就是特定收件人擁有的信箱。使用佇列的通訊稱為點對點通訊。
主題是需要由多個收件人接收訊息時所使用的訊息目的地,每個人表達有興趣接收特定類型的訊息。同樣以傳統郵件做類比,有人可能認為這就像在報紙上撰寫文章一樣;一則訊息由任意數量的收件人閱讀。我們通常將這種設計稱為發佈和訂閱模型。
訊息遞送
訊息遞送有兩種方式:
持續遞送包括將訊息存入檔案或資料庫,保證一定送達。非持續遞送可改善效能和降低儲存成本,但不保證一定送出訊息。以大多數使用 JMS 的應用程式而言,通常會選擇持續遞送。
JMS 用戶端
JMS 用戶端是使用 JMS 的 Java 物件。定義兩個角色:
-
訊息生產者:建立和傳送訊息的 Java 程式。
-
訊息消費者:接收訊息的 Java 程式。
下圖是生產者、消費者及 JMS 提供者如何分工合作的概觀。
訊息生產者可以是任何可存取 JMS 實作的 Java 類別。訊息生產者會建立和傳送訊息。
訊息消費者可以是任何可存取 JMS 實作的 Java 類別。訊息消費者會接收和處理訊息。
JMS 用戶端使用一組介面來存取 JMS。實作 JMS 介面的物件是透過一組 Factory 來建立。起始的 Factory 是 ConnectionFactory。Connection Factory 則透過 JNDI
來查閱。JMS 用戶端會利用 Connection Factory 來建立 Connection 物件。Connection 物件用於建立階段作業物件,此物件做為其他 JMS 物件的 Factory。下圖說明 Factory
之間在概念上的主要關係,已省略佇列和主題的細節。
Connection Factory、連線及階段作業有兩種形式:一種用於佇列,一種用於主題。下列類別圖顯示主要 JMS 概念的介面階層。
JMS 提供者
JMS 提供者是滿足 JMS 規格的實作。JMS 提供者負責接收、保留及傳遞訊息。
詳細資訊
如需 JMS 的相關資訊,請造訪 http://java.sun.com/products/jms/。
|