JMS的兩種模式 P2P,PUB/SUB
1、P2P模型
在P2P模型中,有下列概念:訊息佇列(Queue)、傳送者(Sender)、接收者(Receiver)。每個訊息都被髮送到一個特定的佇列,接收者從佇列中獲取訊息。隊列保留著訊息,直到它們被消費或超時。
每個訊息只有一個消費者 (Consumer)(即一旦被消費,訊息就不再在訊息佇列中)
傳送者和接收者之間在時間上沒有依賴性 ,也就是說當傳送者傳送了訊息之後,不管接收者有沒有正在執行,它不會影響到訊息被髮送到佇列。
接收者在成功接收訊息之後需向佇列應答成功
如果你希望傳送的每個訊息都應該被成功處理 的話,那麼你需要P2P模型。
適用場合:想讓接收者進行且只進行一次處理
元件之間進行同步通訊
2 Pub/Sub模型
在Pub/Sub模型中,有下列概念: 主題(Topic)、釋出者(Publisher)、訂閱者(Subscriber)。客戶端將訊息傳送到主題。多個釋出者將訊息傳送到Topic,系統將這些訊息傳遞給多個訂閱者。
每個訊息可以有多個消費者
釋出者和訂閱者之間有時間上的依賴性 。針對某個主題(Topic)的訂閱者,它必須建立一個訂閱之後,才能消費釋出者的訊息,而且,為了消費訊息,訂閱者必須保持執行的狀態。
當然,為了緩和這種嚴格的時間相關性,JMS允許訂閱者建立一個可持久化的訂閱。這樣,即使訂閱者沒有被啟用(執行),它也能接收到釋出者的訊息。
如果你希望傳送的訊息可以不被做任何處理、或者被一個消費者處理、或者可以被多個消費者處理
關於時間 的依賴性
二種模型的實現結果:
對於p2p 模型的每個訊息只能有一個消費者 如果我們定義二個訊息接受者的Bean那麼只能有一端會接收到訊息。當你把部署在Jboss中的訊息接收Bean去掉以後,然後傳送訊息 此時訊息在佇列中,一旦你重新部署他會立刻就接收到剛剛傳送的訊息 所以它沒有時間的依賴性,
pub/sub 模型可以有多個消費者 在這個模型中如果我們定義多個接收訊息的Bean當我們在客戶端傳送訊息的時候二個bean都會接收到訊息,所以他有多個消費者 但是如果你把Jboss部署中的訊息接收bean去掉之後,傳送訊息。然後在重新部署,那麼訊息也無法接收到