RocketMQ 基礎概念梳理

RocketMQ 基礎概念梳理

模型概念

  • Topic: 是用於存儲邏輯的地址的
  • Consumer Group: 是代表兩個Consumer可共享相互之間的訂閱
  • Message Queue: 消息隊列
  • CommitLog: 是消息主體以及元數據的存儲主體(也可在Consume Queue數據丟失時用於數據恢復)
  • Consume Queue: 是一個消息的邏輯隊列,存儲了這個Queue在CommitLog中的起始offset,log大小和MessageTag的hashCode。每個Topic下的每個Queue都有一個對應的ConsumerQueue文件,例如Topic中有三個隊列,每個隊列中的消息索引都會有一個編號,編號從0開始,往上遞增。並由此一個位點offset的概念,有了這個概念,就可以對Consumer端的消費情況進行隊列定義。
  • Message ID: MQ給每個消息分配的一個唯一id

組件概念

  • Producer: 是消息的發送者
  • Consumer: 是消息訂閱者(消費者)
  • Broker: 是實際存儲消息的數據節點
  • Nameserver: 則是服務發現節點

消息發送

Producer 請求 Nameserver 獲取指定的 Topic 所在的 Broker(路由地址, 隊列信息(Message Queue)等), 然後講消息發送過去

消息消費

Consumer 請求 Nameserver 獲取指定的 Topic 所在的 Broker(路由地址, 隊列信息(Message Queue)等), 然後獲取消息

消息消費分兩種模式:

  • pull: Consumer定時拉取消息
  • push: 消息隊列主動往存活的Consumer推送消息

注意事項

1. 重複消息

由於各種原因, 可能會造成消息重複消費, 所以在設計的時候要保證業務的冪等性或者通過記錄消息id將消息去重處理

2. 如何重新消費消息

可能有各種原因導致需要將消息重複消費一遍(上次消費業務沒正確執行)

  1. 在控制檯通過Message ID查詢指定的消息, 然後點擊resend message按鈕
  2. offset修改到前面的位置(offset會重新向後偏移, 並重新消費一遍消息)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章