Sun Java System Message Queue 3.7 UR1 技術摘要

訊息傳送網域

訊息傳送中介軟體可讓元件與應用程式藉由產生及使用訊息的方式進行通訊。JMS API 定義兩種式樣 (訊息傳送網域) 來管理這類通訊:點對點訊息傳送發佈/訂閱訊息傳送。JMS API 的目的就是支援這些式樣。基本的 JMS 物件有:連線、階段作業、產生器、用戶、目標及訊息等,可用來指定這兩個網域中的訊息傳送運作方式。

點對點訊息傳送

在點對點網域中,訊息產生器稱為傳送者,而用戶稱為接收者。他們會藉由稱為佇列的目標來交換訊息:傳送者會產生訊息到佇列,而接收者則會使用佇列中的訊息。

圖 2–1 所示是點對點網域中最簡易的訊息傳送作業。MyQueueSender 傳送 Msg1 到佇列目標 MyQueue1。然後, MyQueueReceiver 取得 MyQueue1 上的訊息。

圖 2–1 簡易的點對點訊息傳送

訊息會透過佇列目標從傳送者傳送到接收者。下圖將以文字說明。

圖 2–2 所示圖片,是較為複雜的點對點訊息傳送,說明此網域中可能發生的情況。MyQSender1MyQSender2 兩位傳送者皆使用相同的連線將訊息傳送到 MyQueue1 MyQSender3 則使用另一條連線將訊息傳送到 MyQueue1 。在接收端上,MyQReceiver1 會使用 MyQueue1 上的訊息,而 MyQReceiver2MyQReceiver3 則會共用同一條連線,以使用 MyQueue1 上的訊息。

圖 2–2 複雜的點對點訊息傳送

兩位傳送者使用同一條連線將訊息傳送給某位接收者。兩位用戶從相同的佇列中取得訊息。圖以文字介紹。

這個較複雜的圖片解釋了許多有關點對點訊息傳送的其他資訊。

點對點模型具有許多優點:

發佈/訂閱訊息傳送

在發佈/訂閱網域中,訊息產生器稱為發佈者,而訊息用戶則稱為訂閱者。他們會藉由稱為主題的目標來交換訊息:發佈者會產生主題相關的訊息,而訂閱者則會訂閱主題,並使用主題所提供的訊息。

圖 2–3 所示是發佈/訂閱網域中的簡易訊息傳送作業。MyTopicPublisherMsg1 發佈到目標 MyTopic 上。然後,MyTopicSubscriber1MyTopicSubscriber2 各自從 MyTopic 接收一份 Msg1

圖 2–3 簡易的發佈/訂閱訊息傳送

附圖所示是某發佈者透過主題目標將相同的訊息傳送給兩名訂閱者。下圖將以文字說明。

發佈/訂閱模型中不一定要有多位訂閱者;此圖中之所以顯示兩名訂閱者,是為了強調此網域可讓您廣播訊息。某項主題的所有訂閱者皆可收到任何發佈到該主題的訊息。

訂閱者可以是非長期或長期的訂閱者。代理程式會保留所有使用中訂閱者的訊息,但對於非使用中的訂閱者,便只會為長期訂閱者保留訊息。

圖 2–4 所示圖片,是較為複雜的發佈/訂閱訊息傳送,說明此式樣中可能發生的情況。數個產生器發佈訊息到 Topic1 目標。數名訂閱者使用 Topic1 目標上的訊息。除非訂閱者利用選擇器來篩選訊息,否則每位訂閱者都會取得所有發佈到所選主題的訊息。在圖 2–4 中,MyTSubscriber2 已將 Msg2 篩選掉。

圖 2–4 複雜的發佈/訂閱訊息傳送

附圖所示是三位發佈者透過一個主題目標將訊息傳送給三名訂閱者。下圖將以文字說明。

這個較複雜的圖片解釋了許多有關發佈/訂閱訊息傳送的其他資訊。

發佈/訂閱模型主要的優點在於可以將訊息廣播給多名訂閱者。

網域專用及統一的 API

JMS API 可定義讓您用來實作點對點或發佈/訂閱網域的介面與類別。這些就是表 2–1 第 2 欄與第 3 欄所顯示的網域專用 API。JMS API 另外可定義統一網域,讓您進行一般訊息傳送用戶端的程式設計。這類用戶端的運作方式,取決於它產生訊息與使用訊息的目標類型。若目標為佇列,則訊息傳送的運作方式會依據點對點式樣;若目標為主題,則訊息傳送的運作方式會依據發佈/訂閱式樣。

表 2–1 JMS 程式設計網域及物件

基本類型 (統一網域) 

點對點網域 

發佈/訂閱網域 

Destination (佇列或主題)

Queue

Topic

ConnectionFactory

QueueConnectionFactory

TopicConnectionFactory

Connection

QueueConnection

TopicConnection

Session

QueueSession

TopicSession

MessageProducer

QueueSender

TopicPublisher

MessageConsumer

QueueReceiver

TopicSubscriber

JMS 從版本 1.1 開始引入統一網域。如果您需要符合較早的 JMS 1.02b 規格,可以使用網域專用的 API。使用網域專用的 API 也可提供清晰的程式設計介面,避免出現特定類型的程式設計錯誤:例如,為佇列目標建立長期訂閱。然而,網域專用 API 的缺點是,您不能在同一作業事件或同一階段作業中結合點對點和發佈/訂閱作業。如果您需要執行這些動作,應該選擇統一網域 API。如需結合兩個網域的範例,請參閱請求回覆式樣