【rocketmq學習筆記】rocketmq入門學習
阿新 • • 發佈:2021-02-16
### 基本介紹
rocketmq是阿里巴巴團隊使用java語言開發的一款基於釋出訂閱模型的分散式訊息佇列中介軟體,是一款低延遲,高可用,擁有海量訊息堆積能力和靈活拓展性的訊息佇列。
### 特點
* 可以實現叢集無單點故障問題,節點高可用,水平可擴充套件;
* 支援訊息儲存,寫入低延遲,支援實時訊息查詢;
* 支援上萬個訊息佇列,效能高;
* 提供訊息失敗重試機制,可靠性高;
* 開源社群活躍性高,經受過阿里雙十一考驗,具備較高成熟度。
### 基本元件
下圖是rocketmq的物理部署架構:
![](https://img2020.cnblogs.com/blog/1401516/202102/1401516-20210216122415289-869448716.png)
從上圖可以知道,rocketmq由四大核心模組組成:producer、consumer、brokerServer、nameServer。其中brokerServer和nameServer是rocketmq的服務端,兩者一起獨立的對外提供服務;而producer和consumer可看做是rocketmq的客戶端,一般依附於業務應用程式。下面對這四個元件進行分別介紹:
* NameSever
NameServer,一般稱為名稱伺服器,是rocketmq中一個非常重要的元件,主要提供輕量級服務發現和路由功能,功能說明如下:
1.broker管理:NameServer負責接收Broker叢集各個節點的註冊資訊,並定時提供心跳來檢測叢集中的Broker是否可用;
2.路由管理:NameServer 還負責儲存和維護broker叢集的路由元資訊,broker的每次上下線都和nameServer通訊,由nameServer來維護broker的路由資訊,而producer和consumer通過訪問nameServer獲得對應broker的訪問地址後,再向對應的broker發起請求。nameServer解除了broker和客戶端的耦合依賴關係,大大提高了效率。
* BrokerServer
BrokerServer主要負責rocketmq中訊息的接收,儲存和轉發,支援訊息的push和pull模式,提供了極高的峰值處理能力和按照時間順序儲存數以百萬記的訊息儲存能力,此外,它提供了災難恢復、豐富的度量統計和警報機制,因此成為rocketmq中最核心的元件。
* Producer
Producer,顧名思義就是生產者,在Rocketmq中主要用來產生併發送訊息,生產端可以使用producer來發送多種形式的訊息到brokerServer, 然後由brokerServer統一進行分發。rocketmq的producer支援多種形式的訊息傳送,如同步訊息傳送、非同步回撥訊息傳送、順序訊息傳送以及單向訊息傳送(非同步無回撥)。除了單向訊息傳送,其餘的傳送方式均需要brokerServer返回傳送結果的確認訊息。另外,相比其他MQ中介軟體,rocketmq的一個重要功能是支援發發送事務訊息(半訊息),該機制能一定程度上解決分散式事務的問題。
* Consumer
Consumer是消費者元件,負責消費producer傳送的訊息,它會從brokerServer獲取訊息併發送給應用程式,應用程式可以根據需要進行消費。Consumer支援兩種消費模式,一種是推模式,這種模式下訊息是由brokerServer主動推送給Consumer的,而拉模式則是Consumer定期去brokerServer拉取訊息。
rocketmq使用的消費原語是At least Once, 即至少一次消費成功。如果一定時間內沒有接收到consumer訊息確認消費的響應結果,會將同一條訊息再次投遞給consumer。rocketmq採用ack機制保證訊息的消費成功,所以consumer可能會多次收到同一條訊息,需要consumer的業務方做好冪等防護。
### 基本概念
除了上述說明的基本元件,rocketmq中還有一些基本概念需要進行說明,掌握這些概念之後使用者可以更好地理解rocketmq的設計理念。
* Topic
Topic即主題,在rocketmq中代表一系列訊息的集合,屬於一級訊息型別,通常用於對訊息進行初步分類。任何訊息只能屬於一個topic主題,主題是rocketmq進行訊息釋出訂閱的最小單位。業務方可以通過建立並訂閱各式各樣的主題來滿足自身的業務要求。不同主題之間的訊息在邏輯上沒有關聯。
* Tag
Tag即標籤,從屬於Topic,用於在同一主題內部對訊息進行進一步區分,標籤可以簡單的認為是二級主題,通過tag標籤功能,業務方可以方便的實現對各種二級主題的消費需求,從而實現對訊息的精確分類和消費。
* group
group,顧名思義就是組的意思,在rocketmq中代表著同一類客戶端的集合。具體可分為消費者組(consumer group)和生產者組(producer group)兩種。消費者組和生產者組之間沒有任何關聯(即使組名一樣)。
1.消費者組:
消費者組代表著同一型別的消費者叢集。同一消費者組內的消費者通常消費同樣的訊息且訊息消費邏輯一致。消費者組的概念使得consumer叢集在消費訊息時,rocketmq可以通過負載均衡來做到消費訊息時的高可用和容錯。
2.生產者組:
類似地,生產者組代表同一型別的生產者集合,在rocketmq中生產者組可以實現事務訊息的高可用性。
* message
message是rocketmq中訊息傳遞的主體,每一條訊息具有全域性唯一的message ID, 使用者可以根據message ID查詢進行訊息的精確查詢。另外,message的內容可以是不超過rocketmq限制的任意二進位制資料,rocketmq不會對訊息承載的資料內容做任何干預。
* 叢集模式
叢集模式:對於任意一條被訂閱的訊息,同一消費者組下的節點只有一個節點對其進行消費;一個消費者組中的全部節點分攤所有訊息。
消費示例圖如下所示:
![](https://img2020.cnblogs.com/blog/1401516/202102/1401516-20210216122906331-410117904.png)
* 廣播模式
廣播模式:對於任意一條被訂閱的訊息,同一消費者組下的所有節點都會對其進行消費;一個消費者組中的全部節點都能接收到全量的訊息。
消費示例圖如下所示:
![](https://img2020.cnblogs.com/blog/1401516/202102/1401516-20210216122920362-788095699.png)
### 參考資料
https://www.cnblogs.com/ldy-blogs/p/10452422.html
https://blog.csdn.net/qq_37939251/article/details/84026365
https://www.cnblogs.com/xiaoxiongcanguan/p/11510