JMS和ActiveMQ入門

      JMS 叫做 Java 消息服務(Java Message Service),是 Java 平臺上有關面向 MOM 的技術規範, 爲Java程序提供了一種創建、發送、接收和讀取企業消息系統中消息的通用方法,而ActiveMQ 是衆多實現了JMS規範的消息中間件之一。

       消息中間件是在消息的傳輸過程中保存信息的容器。消息中間件再將消息從它的源中繼到它的目標時充當中間人的作用。隊列的主要目的是提供路由並保證消息的傳遞;如果發送消息時接收者不可用,消息隊列會保留消息,直到可以成功地傳遞它爲止,當然,消息隊列保存消息也是有期限的。

消息中間件的特點

採用異步處理模式

消息發送者可以發送一個消息而無須等待響應。消息發送者將消息發送到一條虛擬的通道(主題或隊列)上,消息接收者則訂閱或是監聽該通道。一條信息可能最終轉發給一個或多個消息接收者,這些接收者都無需對消息發送者做出同步迴應。整個過程都是異步的。

 應用程序和應用程序調用關係爲松耦合關係

主要體現在如下兩點:
(1)發送者和接受者不必瞭解對方、只需要確認消息
(2)發送者和接受者不必同時在線
比如在線交易系統爲了保證數據的最終一致,在支付系統處理完成後會把支付結果放到消息中間件裏通知訂單系統修改訂單支付狀態。兩個系統通過消息中間件解耦。具體請訪問:爲什麼一定要使用消息中間件

JMS消息類型

JMS裏面有兩個被管理的對象:

ConnectionFactory: 客戶端用來創建同JMS提供者之間的連接的對象。

Destination :這個對象是客戶端用來指明消息被髮送的目的地以及客戶端接收消息的來源。

被管理的對象一般被管理員放在JNDI名字空間中,通常在JMS客戶端應用的文檔中說明它所需要的JMS被管理對象,以及應以何種JNDI名字來提供這些JMS被管理對象。可通過naming.lookup()來獲取對象

JMS管理的工作流程

  • 獲取連接工廠
  • 使用連接工廠創建連接
  • 啓動連接
  • 從連接創建會話
  • 獲取 Destination
  • 創建 Producer,或
    • 創建 Producer
    • 創建 message
  • 創建 Consumer,或發送或接收message發送或接收 message
    • 創建 Consumer
    • 註冊消息監聽器(可選)
  • 發送或接收 message
  • 關閉資源(connection, session, producer, consumer 等)

JMS提供兩種最普遍的消息模式:點對點(P2P)和發佈/訂閱(Pub/Sub)

點對點(P2P):
        P2P (點對點)消息域使用 queue 作爲 Destination,消息可以被同步或異步的發送和接收,每個消息只會給一個 Consumer 傳送一次。Consumer 可以使MessageConsumer.receive() 同步地接收消息,也可以通過使用MessageConsumer.setMessageListener() 註冊一個 MessageListener 實現異步接收。多個 Consumer 可以註冊到同一個 queue 上,但一個消息只能被一個 Consumer 所接收,然後由該 Consumer 來確認消息。並且在這種情況下,Provider 對所有註冊的 Consumer 以輪詢的方式發送消息。

特點:

(1)每個消息只用一個消費者
(2)發送者和接受者沒有時間依賴
(3)接受者確認消息接受和處理成功

發佈/訂閱(Pub/Sub)

Pub/Sub(發佈/訂閱,Publish/Subscribe)消息域使用 topic 作爲 Destination,發佈者向 topic 發送消息,訂閱者註冊接收來自 topic 的消息。發送到 topic 的任何消息都將自動傳遞給所有訂閱者。接收方式(同步和異步)與 P2P 域相同。
除非顯式指定,否則 topic 不會爲訂閱者保留消息。當然,這可以通過持久化(Durable)訂閱來實現消息的保存。這種情況下,當訂閱者與 Provider 斷開時,Provider 會爲它存儲消息。當持久化訂閱者重新連接時,將會受到所有的斷連期間未消費的消息。

發佈/訂閱模型特點:
(1)每個消息可以有多個訂閱者
(2)客戶端只有訂閱後才能接收到消息
(3)持久訂閱和非持久訂閱

注意:
(1)發佈者和訂閱者有時間依賴
接受者和發佈者只有建立訂閱關係才能收到消息
(2)持久訂閱
訂閱關係建立後,消息就不會消失,不管訂閱者是否都在線
(3)非持久訂閱
訂閱者爲了接受消息,必須一直在線。

當發佈/訂閱模型只有一個訂閱者時約等於點對點模式

圖文參考ActiveMQ基礎篇消息中間件原理與實現​​​​​​​

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章