目錄[-]
1.1 JMS模型簡介
JMS支持兩種消息通信模型:
-
點對點模型(Point to Point,P2P)
-
發佈者/訂閱者模型(publish/subscribe, pub/sub)
P2P模型中,Sender把一個消息發送到Queue中,這個消息只能由一個客戶端消費;一旦消息被消費,其它客戶端就不能從這個Queue中獲取到消息。巧克力糖盒子裏只有一塊糖,只有最先打開的那個人能吃到,後來的人就吃不到了。
Pub/Sub模型中,一個消息主題(Topic)被髮布以後,可以有多個訂閱者收聽,這些訂閱者都可以獲取到消息;前提是,訂閱者訂閱了這個主題,並且只能接受訂閱以後的消息。這就像生活裏的期刊訂閱,我們只能收到訂閱以後的期刊,之前的期刊,雜誌社是不可能投遞給我們的。
1.2點對點模型
-
只有一個消費者
每條消息只有一個消費者,如果這條消息被消費,那麼其它消費者不能接受到此消息。
-
時間無關性
消息的消費和時間無關,只要消息被髮送了,在消息過期之前,如果沒有其他消費者消費了這個消息,那麼客戶端可以在任何時候來消費這條消息。
-
消費者必須確認
消費者收到消息之後,必須向Message Provider確認,否則會被認爲消息沒有被消費,仍然可以被其他消費者消費。可以設置自動確認。這個特點其實也是保證一條消息只能由一個消費者來消費。
-
非持久化的消息只發一次
非持久化的消息,可能會丟失,因爲消息會過期,另外Message Provider可能宕機。
-
持久化的消息嚴格發一次
消息可以被持久化,比如持久化在文件系統或者數據庫中,這樣可以避免Message Provider的異常或者其它異常導致消息丟失。
1.3發佈者/訂閱者模型
-
每條消息可以有多個訂閱者
-
訂閱者只能消費它們訂閱topic之後的消息
-
非持久化訂閱,訂閱者必須保持爲活動狀態才能使用這些消息,如果一個訂閱者A斷開了10分鐘,那麼A就會收不到這10分鐘內的消息。
-
持久化訂閱,Message Provider會保存這些消息,即使訂閱者因爲網絡原因斷開了,再重新連接以後,能讓消費這些消息。
-
是否使用持久化訂閱,需要根據業務場景判斷。