-
Name Server:Broker 的註冊中心
- 作為 Broker 的註冊中心,提供給生產者和消費者查詢 Broker 的能力(路由)
- 既然是註冊中心,和 Nacos 一樣有心跳檢測機制,不健康的 Broker 會被剔除
-
Broker:RocketMQ 核心,接收生產者的訊息,消費者從這裡取訊息
- 兩種型別 Master、Slave(主從,主可寫可讀,從只能讀)
- 訊息到 Broker 後,然後根據 Topic 分類,輪詢放入佇列
-
Producer:訊息生產者,有三種傳送訊息的方式
- 單向:不管訊息是否傳送成功,也 不接收 Broker 響應回撥
- 同步:傳送後等待伺服器響應
- 非同步:不管訊息是否傳送成功,但 會接收 Broker 響應回撥
-
Consumer:訊息消費者,預設多執行緒消費,如果要保證順序要改為單執行緒。有兩種接收訊息的方式
- Push:Broker 會根據訂閱關係主動將訊息推送給消費者,優點是及時性好,缺點是如果推送大量訊息可能消費者處理不過來導致當機
- Pull:消費者根據訂閱關係主動向 Broker 拉取訊息,拉取的頻率要消費者自己配置,優點是消費者不會因為能力不足處理不過來,缺點是頻率如果控制不好,可能造成消費不及時
-
Topic :訊息主題
- Broker 的一種邏輯分割槽,訊息傳送到 Broker 後,會放到指定的 Topic,消費者也是到 Topic 拉取訊息
- 也可以理解為訊息的分類(一級分類,Tag 是二級分類)
- 預設 4 個佇列,可以修改(生產者傳送訊息時的配置項)
-
Tag:訊息標籤(也可以理解為訊息的二級分類),傳送一個帶 Tag 的訊息,不同的消費者可以根據 Tag 選擇是否處理
-
ConsumerGroup:消費者組
- 訂閱一致性:同一組下的消費者必須訂閱同一個 Topic
- 如果多個消費者組訂閱了某個 Topic,每個組都會接收到訊息,但是每個組下只能一個消費者去消費(預設的叢集模式下,也就是點對點模式,如果消費者是廣播模式,這個組下的每個消費者都要消費)
-
Queue:訊息佇列,真正存放訊息的地方,屬於 Topic,預設一個 Topic 有 4 個佇列
簡要的訊息流程
- 生產者把訊息傳送到 Broker(NameServer 負責路由到哪個 Broker),傳送失敗會重試,預設 2 次
- Broker 負責把訊息放入指定的 Topic 下的佇列中,如果投遞成功,該佇列最大位點+1
- 如果是順序訊息,這批訊息會放入同一個佇列
- 如果不是順序訊息,負載均衡(輪詢)地放入佇列
- 訂閱了這個 Topic 的消費者組都會收到訊息
- 每個消費者組下的消費者也是輪詢獲取訊息(預設方式,叢集,也可以改為廣播模式)
- 消費成功,佇列消費者位點+1
- 如果消費失敗,訊息會重新放入佇列,該組下的其他消費者(如果沒有,重試也是自己)嘗試消費
- 預設重試消費 16 次,如果 16 次都失敗,訊息進入死信佇列