ActiveMQ消息隊列從入門到實踐(1)—JMS的概念和JMS消息模型

1. 面向消息的中間件java

1.1 什麼是MOM數據庫

面向消息的中間件,Message Oriented Middleware,簡稱MOM,中文簡稱消息中間件,利用高效可靠的消息傳遞機制進行平臺無關的數據交流,並基於數據通訊來進行分佈式系統的集成。編程

一個MOM系統,一般會包括客戶端(Clients)、消息(Message)和 MOM,客戶端是發送或者接受消息的應用程序,消息封裝了要傳遞的內容,MOM能夠存儲和轉發消息。以下圖所示,系統A和系統B之間的消息傳遞,不是直接通訊,而是經過中間件來間接的傳遞。網絡

image.png

1.2 MOM的好處異步

下降系統間通訊複雜度分佈式

有了MOM,系統間的通訊,不用考慮系統是什麼語言開發的,也不用考慮複雜的網絡編程,各個系統只須要關心自身和MOM之間如何進行消息的接受和發送便可,這些操做經過簡單的API就能夠完成。ide

 

提升了消息的靈活性中間件

系統A經過MOM向系統B發送消息,消息能夠存儲在MOM中,並由MOM轉發。即便是系統B不在線,MOM會持有這個消息,直到系統B鏈接並處理消息。對象

這就是說,系統A發完消息後,就能夠執行其它操做,而沒必要阻塞等待,尤爲是對那些時間無關或者並行處理的操做,很是適用。blog

 

鬆散耦合

有了MOM的存在,對於系統B而言,只要發送的消息沒有變化,就沒必要考慮系統A的變化。A系統的代碼改變,不會影響到B系統,反之亦然。

 

2. JMS概念

2.1 JMS是什麼

Java消息服務(Java Message Service,JMS)應用程序接口是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通訊。Java消息服務是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持。

Java消息服務的規範包括兩種消息模式,點對點和發佈者/訂閱者。Java消息服務支持同步和異步的消息處理。

 

一個JMS系統,一般包括瞭如下部分:

JMS Client,java語言編寫的客戶端,用於發送和接受消息。

Non-JMS Client,使用消息系統本地API編寫的客戶端,而不是使用JMS API。

Message,消息,被定義,用於在不一樣的客戶端之間交換。

JMS Provider,JMS提供商,是消息系統(好比ActiveMQ),固然,便可以支持JMS,也能夠同時支持Non-JMS。

Administered Objects,被管理的對象,預置的JMS對象,爲客戶端使用。

 

2.3 JMS規範

JMS規範只是定義了接口,並無實現,規範全文見:JSR 914: JavaTM Message Service (JMS) API 。

 

3. JMS模型簡介

3.1 JMS支持兩種消息通訊模型:

點對點模型(Point to Point,P2P)

發佈者/訂閱者模型(publish/subscribe,  pub/sub)

image.png

P2P模型中,Sender把一個消息發送到Queue中,這個消息只能由一個客戶端消費;一旦消息被消費,其它客戶端就不能從這個Queue中獲取到消息。巧克力糖盒子裏只有一塊糖,只有最早打開的那我的能吃到,後來的人就吃不到了。

Pub/Sub模型中,一個消息主題(Topic)被髮布之後,能夠有多個訂閱者收聽,這些訂閱者均可以獲取到消息;前提是,訂閱者訂閱了這個主題,而且只能接受訂閱之後的消息。這就像生活裏的期刊訂閱,咱們只能收到訂閱之後的期刊,以前的期刊,雜誌社是不可能投遞給咱們的。

 

3.2 點對點模型

只有一個消費者:每條消息只有一個消費者,若是這條消息被消費,那麼其它消費者不能接受到此消息。

時間無關性:消息的消費和時間無關,只要消息被髮送了,在消息過時以前,若是沒有其餘消費者消費了這個消息,那麼客戶端能夠在任什麼時候候來消費這條消息。

消費者必須確認:消費者收到消息以後,必須向Message Provider確認,不然會被認爲消息沒有被消費,仍然能夠被其餘消費者消費。能夠設置自動確認。這個特色其實也是保證一條消息只能由一個消費者來消費。

 

非持久化的消息只發一次:非持久化的消息,可能會丟失,由於消息會過時,另外Message Provider可能宕機。

持久化的消息嚴格發一次:消息能夠被持久化,好比持久化在文件系統或者數據庫中,這樣能夠避免Message Provider的異常或者其它異常致使消息丟失。

 

3.3 發佈者/訂閱者模型

每條消息能夠有多個訂閱者,訂閱者只能消費它們訂閱topic以後的消息。

非持久化訂閱,訂閱者必須保持爲活動狀態才能使用這些消息,若是一個訂閱者A斷開了10分鐘,那麼A就會收不到這10分鐘內的消息。持久化訂閱,Message Provider會保存這些消息,即便訂閱者由於網絡緣由斷開了,再從新鏈接之後,能讓消費這些消息。是否使用持久化訂閱,須要根據業務場景判斷。

來源地址:https://blog.yoodb.com/yoodb/article/detail/1541

相關文章
相關標籤/搜索