帶你走進EJB--JMS
阿新 • • 發佈:2018-12-24
在上篇文章中我們對EJB有了一個基本的瞭解,因為要繼續介紹EJB的相關分類,而在分類中有一個是訊息驅動Bean(MessageDriverBean),而MDB是基於JMS(Java Message Service,Java訊息服務),所以在這裡很有必要對JMS進行了解.
什麼是JMS?
JMS(Java Message Service)是Java的訊息服務,JMS的客戶端之間可以通過JMS服務進行非同步的訊息傳輸。JMS支援兩種訊息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即點對點和釋出訂閱模型。
P2P模型(如下圖)
在P2P模型中,有下列概念:訊息佇列(Queue)、傳送者(Sender)、接收者(Receiver)。每個訊息都被髮送到一個特定的佇列,接收者從佇列中獲取訊息。佇列保留著訊息,直到它們被消費或超時。
在P2P模型中需要注意一下三點.
- 每個訊息只有一個消費者(Consumer)(即一旦被消費,訊息就不再在訊息佇列中)
- 傳送者和接收者之間在時間上沒有依賴性,也就是說當傳送者傳送了訊息之後,不管接收者有沒有正在執行,它不會影響到訊息被髮送到佇列。
- 接收者在成功接收訊息之後需向佇列應答成功,如果你希望傳送的每個訊息都應該被成功處理的話,那麼你需要P2P模型。
Pub/Sub模型(如下圖)
在Pub/Sub模型中,有下列概念: 主題(Topic)、釋出者(Publisher)、訂閱者(Subscriber)。客戶端將訊息傳送到主題。多個釋出者將訊息傳送到Topic,系統將這些訊息傳遞給多個訂閱者。
在此模型下需要注意的兩點
- 每個訊息可以有多個消費者。
- 釋出者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須建立一個訂閱之後,才能消費釋出者的訊息,而且,為了消費訊息,訂閱者必須保持執行的狀態。
訊息的消費
在JMS中,訊息的產生和消費是非同步的。對於消費來說,JMS的消費者可以通過兩種方式來消費訊息。
- 同步 –訂閱者或接收者呼叫receive方法來接收訊息,
- 非同步 –訂閱者或接收者可以註冊為一個訊息監聽器。當訊息到達之後,系統自動呼叫監聽器的onMessage方法。
以上內容為JMS的基本模型,接下來我們將會研究一下JMS的程式設計模型來加深對JMS的理解.