天天看點

消息隊列中間件 RocketMQ

RcoketMQ 是一款低延遲、高可靠、可伸縮、易于使用的消息中間件。

引用:http://rocketmq.apache.org/

特點:

支援釋出/訂閱(Pub/Sub)和點對點(P2P)消息模型 在一個隊列中可靠的先進先出(FIFO)和嚴格的順序傳遞 支援拉(pull)和推(push)兩種消息模式 單一隊列百萬消息的堆積能力 支援多種消息協定,如 JMS、MQTT 等 分布式高可用的部署架構,滿足至少一次消息傳遞語義 提供 docker 鏡像用于隔離測試和雲叢集部署 提供配置、名額和監控等功能豐富的 Dashboard

在這裡: 有時間學學~... ...

消息生産者,生産者的作用就是将消息發送到 MQ,生産者本身既可以産生消息,如讀取文本資訊等。也可以對外提供接口,由外部應用來調用接口,再由生産者将收到的消息發送到 MQ。

生産者組,簡單來說就是多個發送同一類消息的生産者稱之為一個生産者組。在這裡可以不用關心,隻要知道有這麼一個概念即可。

消息消費者,簡單來說,消費 MQ 上的消息的應用程式就是消費者,至于消息是否進行邏輯處理,還是直接存儲到資料庫等取決于業務需要。

消費者組,和生産者類似,消費同一類消息的多個 consumer 執行個體組成一個消費者組。

Topic 是一種消息的邏輯分類,比如說你有訂單類的消息,也有庫存類的消息,那麼就需要進行分類,一個是訂單 Topic 存放訂單相關的消息,一個是庫存 Topic 存儲庫存相關的消息。

Message 是消息的載體。一個 Message 必須指定 topic,相當于寄信的位址。Message 還有一個可選的 tag 設定,以便消費端可以基于 tag 進行過濾消息。也可以添加額外的鍵值對,例如你需要一個業務 key 來查找 broker 上的消息,友善在開發過程中診斷問題。

标簽可以被認為是對 Topic 進一步細化。一般在相同業務子產品中通過引入标簽來标記不同用途的消息。

Broker 是 RocketMQ 系統的主要角色,其實就是前面一直說的 MQ。Broker 接收來自生産者的消息,儲存以及為消費者拉取消息的請求做好準備。

Name Server 為 producer 和 consumer 提供路由資訊。

一:架構

消息隊列中間件 RocketMQ

    由這張圖可以看到有四個叢集,分别是 NameServer 叢集、Broker 叢集、Producer 叢集和 Consumer 叢集:

NameServer: 提供輕量級的服務發現和路由。 每個 NameServer 記錄完整的路由資訊,提供等效的讀寫服務,并支援快速存儲擴充。

Broker: 通過提供輕量級的 Topic 和 Queue 機制來處理消息存儲,同時支援推(push)和拉(pull)模式以及主從結構的容錯機制。

Producer:生産者,産生消息的執行個體,擁有相同 Producer Group 的 Producer 組成一個叢集。

Consumer:消費者,接收消息進行消費的執行個體,擁有相同 Consumer Group 的

Consumer 組成一個叢集。

    簡單說明一下圖中箭頭含義,從 Broker 開始,Broker Master1 和 Broker Slave1 是主從結構,它們之間會進行資料同步,即 Date Sync。同時每個 Broker 與NameServer 叢集中的所有節點建立長連接配接,定時注冊 Topic 資訊到所有 NameServer 中。Producer 與 NameServer 叢集中的其中一個節點(随機選擇)建立長連接配接,定期從 NameServer 擷取 Topic 路由資訊,并向提供 Topic 服務的 Broker Master 建立長連接配接,且定時向 Broker 發送心跳。Producer 隻能将消息發送到 Broker master,但是 Consumer 則不一樣,它同時和提供 Topic 服務的 Master 和 Slave建立長連接配接,既可以從 Broker Master 訂閱消息,也可以從 Broker Slave 訂閱消息。

二:安裝部署

單 master 的部署模式。先說明一下安裝環境:以git操作為示例。

Centos 7.2

jdk 1.8

Maven 3.2.x

Git

clone 源碼并用 maven 編譯

啟動 Name Server

啟動 broker

發送和接收消息

發送/接收消息之前,我們需要告訴用戶端 NameServer 位址。RocketMQ 提供了多種方式來實作這一目标。為簡單起見,我們使用環境變量 NAMESRV_ADDR。

關閉服務

消息隊列中間件 RocketMQ

    引用:http://rocketmq.apache.org/