1、面向消息的中間件
1.1 什麼是MOM
面向消息的中間件,Message Oriented Middleware,簡稱MOM,利用高效可靠的消息傳遞機制進行平臺無關的數據交流,並基於數據通信來進行分佈式系統的集成。一個MOM系統,通常會包括客戶端(Client)、消息(Message)和MOM,客戶端是發送或者接收消息的應用程序,消息封裝了要傳遞的內容,MOM可以存儲和轉發消息。
1.2 MOM的好處
降低系統間的通信複雜度。有了MOM,系統間通信可以跨編程語言、不用考慮複雜的網絡編程,只需要關心自身和MOM之間如何進行消息的收發即可。而消息的收發通過簡單的API就可以完成
提高消息的靈活性。系統A通過MOM向系統B發送消息,消息可以存儲在MOM中,並由MOM轉發。即使是系統B不在線,MOM會持有這個消息,直到系統B連接並處理消息。這就是說,系統A發完消息後,就可以執行其它操作,而不必阻塞等待,尤其是對那些時間無關或者並行處理的操作,非常適用。
鬆散耦合。有了MOM的存在,對於系統B而言,只要發送的消息沒有變化,就不必考慮系統A的變化。A系統的代碼改變,不會影響到B系統,反之亦然。
2、JMS概念
2.1 JMS是什麼
Java消息服務(Java Message Service,JMS)應用程序接口是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通信。Java消息服務是一個與具體平臺無關的API,絕大多數MOM提供商都對JM提供支持。
JMS的規範包括兩種消息模式,點對點和發佈/訂閱模式。
JMS支持同步和異步的消息處理。
JMS通常包括了以下部分:
JMS Client:Java語言編寫的客戶端,用於收發消息
Non-JMS Client:使用消息系統本地API編寫的客戶端
Message:消息,用於在不同的客戶端之間交換
JMS Provider:JMS提供商,是消息系統(如ActiveMQ),當然既可以支持JMS,也同時支持Non-JMS。
Administered Objects:給管理的對象,預置的JMS對象,被客戶端使用
2.2 JMS規範
JMS規範只是定義了接口,並沒有實現。詳情見JMS API
3、JMS模型簡介
JMS支持兩種消息模型:點對點模型(Point to Point,P2P)和發佈/訂閱模型(Publish/subscribe,pub/sub)
3.1 點對點模型
只有一個消費者。每條消息只有一個消費者,如果這小消息被消費,那麼其他消息消費者不能接受此消息
時間無關性。消息的消費和時間無關,只要消息被髮送了,在消息過期之前,如果沒有其他消費者消費了這個消息,那麼客戶端可以在任何時候來消費這個消息
消費者必須確認。消費者收到消息後必須向Message Provide確認,否則會被認爲沒有接收到此消息,仍然可以被其他消費者消費,可以設置自動確認。
非持久化的消息只發一次。非持久化的消息,可能會丟失,因爲消息會過期,另外Message Provider可能會宕機。
持久化消息嚴格發一次。消息可以被持久化,比如持久化在文件系統或者數據庫中。
3.2 發佈/訂閱模式
每條消息可以有多個訂閱者
訂閱者只能消費他們訂閱topic之後的消息
非持久化訂閱,訂閱者必須保持爲活動狀態才能使用這些消息,如果一個訂閱者斷開了一段時間,那麼該訂閱者就不能接收這段時間內的消息。
持久化訂閱,Message Provider會保存這些消息,即使訂閱者因爲網絡原因斷開了,再重新連接以後,能讓消費者消費這些消息