1. 程式人生 > >訊息中介軟體activeMQ(1)

訊息中介軟體activeMQ(1)

開篇只是提出了訊息中間的定義,點對點、訂閱兩種模式下的訊息傳輸特點和AactiveMQ中訊息傳遞和接收的流程。

基本概念:

MOM 就是面向訊息中介軟體(Message-oriented middleware),是用於以分散式應用或系統中的非同步、鬆耦合、可靠、可擴充套件和安全通訊的一類軟體。MOM 的總體思想是它作為訊息傳送器和訊息接收器之間的訊息中介,這種中介提供了一個全新水平的鬆耦合。

JMS 叫做 Java 訊息服務(Java Message Service),是 Java 平臺上有關面向 MOM 的技術規範,旨在通過提供標準的產生、傳送、接收和處理訊息的 API 簡化企業應用的開發,類似於 JDBC 和關係型資料庫通訊方式的抽象。

相關概念

  • Provider:純 Java 語言編寫的 JMS 介面實現(比如 ActiveMQ 就是)
  • Domains:訊息傳遞方式,包括點對點(P2P)、釋出/訂閱(Pub/Sub)兩種
  • Connection factory:客戶端使用連線工廠來建立與 JMS provider 的連線
  • Destination:訊息被定址、傳送以及接收的物件

P2P (點對點)訊息域使用 queue 作為 Destination,訊息可以被同步或非同步的傳送和接收,每個訊息只會給一個 Consumer 傳送一次。

Consumer 可以使用 MessageConsumer.receive() 同步地接收訊息,也可以通過使用MessageConsumer.setMessageListener() 註冊一個 MessageListener 實現非同步接收。

多個 Consumer 可以註冊到同一個 queue 上,但一個訊息只能被一個 Consumer 所接收,然後由該 Consumer 來確認訊息。並且在這種情況下,Provider 對所有註冊的 Consumer 以輪詢的方式傳送訊息。

Pub/Sub(釋出/訂閱,Publish/Subscribe)訊息域使用 topic 作為 Destination,釋出者向 topic 傳送訊息,訂閱者註冊接收來自 topic 的訊息。傳送到 topic 的任何訊息都將自動傳遞給所有訂閱者。接收方式(同步和非同步)與 P2P 域相同。

除非顯式指定,否則 topic 不會為訂閱者保留訊息。當然,這可以通過持久化(Durable)訂閱來實現訊息的儲存。這種情況下,當訂閱者與 Provider 斷開時,Provider 會為它儲存訊息。當持久化訂閱者重新連線時,將會受到所有的斷連期間未消費的訊息。

步驟:

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

          JMS API 定義了5種訊息體格式,也叫訊息型別,可以使用不同形式傳送接收資料並可以相容現有的訊息格式,下面描述這5種類型: 

    1. TextMessage:java.lang.String物件,如xml檔案內容。

    2. MapMessage:key/value鍵值對的集合,key是String物件,值型別可以是Java任何基本型別。 

    3. BytesMessage:位元組流。

    4. StreamMessage:Java 中的輸入輸出流。

    5. ObjectMessage:Java中的可序列化物件。