天天看點

ActiveMQ消息傳送模型

  無論采用哪種jms 元件,jms 支援兩種截然不同的消息傳送模型:ptp(即點對點模型)和pub/sub(即釋出/訂閱模型),分别稱作:ptp domain 和pub/sub domain。

ptp(使用queue即隊列目标)    

消息從一個生産者傳送至一個消費者。在此傳送模型中,目标是一個隊列。消息首先被傳送至隊列目标,然後根據隊列傳送政策,從該隊列将消息傳送至向此隊列進行注冊的某一個消費者,一次隻傳送一條消息。可以向隊列目标發送消息的生産者的數量沒有限制,但每條消息隻能發送至、并由一個消費者成功使用。如果沒有已經向隊列目标注冊的消費者,隊列将保留它收到的消息,并在某個消費者向該隊列進行注冊時将消息傳送給該消費者。 

pub/sub(使用topic即主題目标)    

消息從一個生産者傳送至任意數量的消費者。在此傳送模型中,目标是一個主題。消息首先被傳送至主題目标,然後傳送至所有已訂閱此主題的活動消費者。可以向主題目标發送消息的生産者的數量沒有限制,并且每個消息可以發送至任意數量的訂閱消費者。

持久訂閱和非持久訂閱者:

非持久訂閱隻有當用戶端處于激活狀态,也就是和jms provider 保持連接配接狀态才能收到發送到某個主題的消息,而當用戶端處于離線狀态,這個時間段發到主題的消息将會丢失,永遠不會收到。

持久訂閱表示消費者已向主題目标進行注冊,但在消息傳送時此消費者可以處于非活動狀态。當此消費者再次處于活動狀态時,它将接收此資訊。如果沒有已經向主題目标注冊的消費者,主題不保留其接收到的消息,除非有非活動消費者注冊了持久訂閱。

持久訂閱時,用戶端向jms 伺服器注冊一個自己身份的id,當這個用戶端處于離線時,jms provider 會為這個id 儲存所有發送到主題的消息,當客戶再次連接配接到jms provider時,會根據自己的id得到所有當自己處于離線時發送到主題的消息。

代碼示例: