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. 如何重新消費消息
可能有各種原因導致需要將消息重複消費一遍(上次消費業務沒正確執行)
- 在控制檯通過
Message ID
查詢指定的消息, 然後點擊resend message
按鈕 - 將
offset
修改到前面的位置(offset
會重新向後偏移, 並重新消費一遍消息)