rocketmq 概念

CyrusHuang發表於2024-09-05
  1. Name Server:Broker 的註冊中心

    1. 作為 Broker 的註冊中心,提供給生產者和消費者查詢 Broker 的能力(路由)
    2. 既然是註冊中心,和 Nacos 一樣有心跳檢測機制,不健康的 Broker 會被剔除
  2. Broker:RocketMQ 核心,接收生產者的訊息,消費者從這裡取訊息

    1. 兩種型別 Master、Slave(主從,主可寫可讀,從只能讀)
    2. 訊息到 Broker 後,然後根據 Topic 分類,輪詢放入佇列
  3. Producer:訊息生產者,有三種傳送訊息的方式

    1. 單向:不管訊息是否傳送成功,也 不接收 Broker 響應回撥
    2. 同步:傳送後等待伺服器響應
    3. 非同步:不管訊息是否傳送成功,但 會接收 Broker 響應回撥
  4. Consumer:訊息消費者,預設多執行緒消費,如果要保證順序要改為單執行緒。有兩種接收訊息的方式

    1. Push:Broker 會根據訂閱關係主動將訊息推送給消費者,優點是及時性好,缺點是如果推送大量訊息可能消費者處理不過來導致當機
    2. Pull:消費者根據訂閱關係主動向 Broker 拉取訊息,拉取的頻率要消費者自己配置,優點是消費者不會因為能力不足處理不過來,缺點是頻率如果控制不好,可能造成消費不及時
  5. Topic :訊息主題

    1. Broker 的一種邏輯分割槽,訊息傳送到 Broker 後,會放到指定的 Topic,消費者也是到 Topic 拉取訊息
    2. 也可以理解為訊息的分類(一級分類,Tag 是二級分類)
    3. 預設 4 個佇列,可以修改(生產者傳送訊息時的配置項)
  6. Tag:訊息標籤(也可以理解為訊息的二級分類),傳送一個帶 Tag 的訊息,不同的消費者可以根據 Tag 選擇是否處理

  7. ConsumerGroup:消費者組

    1. 訂閱一致性:同一組下的消費者必須訂閱同一個 Topic
    2. 如果多個消費者組訂閱了某個 Topic,每個組都會接收到訊息,但是每個組下只能一個消費者去消費(預設的叢集模式下,也就是點對點模式,如果消費者是廣播模式,這個組下的每個消費者都要消費)
  8. Queue:訊息佇列,真正存放訊息的地方,屬於 Topic,預設一個 Topic 有 4 個佇列

簡要的訊息流程

  1. 生產者把訊息傳送到 Broker(NameServer 負責路由到哪個 Broker),傳送失敗會重試,預設 2 次
  2. Broker 負責把訊息放入指定的 Topic 下的佇列中,如果投遞成功,該佇列最大位點+1
    1. 如果是順序訊息,這批訊息會放入同一個佇列
    2. 如果不是順序訊息,負載均衡(輪詢)地放入佇列
  3. 訂閱了這個 Topic 的消費者組都會收到訊息
  4. 每個消費者組下的消費者也是輪詢獲取訊息(預設方式,叢集,也可以改為廣播模式)
    1. 消費成功,佇列消費者位點+1
    2. 如果消費失敗,訊息會重新放入佇列,該組下的其他消費者(如果沒有,重試也是自己)嘗試消費
      1. 預設重試消費 16 次,如果 16 次都失敗,訊息進入死信佇列

相關文章