【rocketmq學習筆記】rocketmq入門學習

基本介紹

rocketmq是阿里巴巴團隊使用java語言開發的一款基於發布訂閱模型的分散式消息隊列中間件,是一款低延遲,高可用,擁有海量消息堆積能力和靈活拓展性的消息隊列。

特點

  • 可以實現集群無單點故障問題,節點高可用,水平可擴展;
  • 支援消息存儲,寫入低延遲,支援實時消息查詢;
  • 支援上萬個消息隊列,性能高;
  • 提供消息失敗重試機制,可靠性高;
  • 開源社區活躍性高,經受過阿里雙十一考驗,具備較高成熟度。

基本組件

下圖是rocketmq的物理部署架構:

從上圖可以知道,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不會對消息承載的數據內容做任何干預。
  • 集群模式
    集群模式:對於任意一條被訂閱的消息,同一消費者組下的節點只有一個節點對其進行消費;一個消費者組中的全部節點分攤所有消息。
    消費示例圖如下所示:
  • 廣播模式
    廣播模式:對於任意一條被訂閱的消息,同一消費者組下的所有節點都會對其進行消費;一個消費者組中的全部節點都能接收到全量的消息。
    消費示例圖如下所示:

參考資料

//www.cnblogs.com/ldy-blogs/p/10452422.html
//blog.csdn.net/qq_37939251/article/details/84026365
//www.cnblogs.com/xiaoxiongcanguan/p/11510366.html

Tags: