Rocket的消息是有consume queue和commit log組成。
Consume Queue
Consume queue是消息的邏輯隊列,相當於字典目錄,用來指定消息在物理文件(commit log)上的位置,我們可以在配置中指定consumequeue和commitlog存儲的目錄。每一個topic下的每個queue都有一個對應的consumqueue文件。
根據topic和queueid來組織文件,topicA中有2個隊列(0和1),那麼topicA和queueID=0就組成一個consume queue,另外topicA和queueID=1就組成另外一個consume queue
按照消費端的GroupNanme來分組重試隊列,如果消費端消費失敗,消息將被髮往重試隊列,圖中的%RETRY%ConsumerGroupA
按照消費端的GroupName來分組死信隊列,如果消費端消費失敗,並重試指定次數後,仍然失敗,則發往死信隊列(用於存放無法傳遞的消息),圖中的%DLQ%ConsumerGroupA
Consume queue中的存儲單元是20字節長度的二進制數據,順序讀寫
commitLog Offset,這條消息在commit log中的實際偏移量
size存儲的是這條消息的大小
message tag hashcode,是存儲這個消息的TAG的哈希值,用於訂閱時消息過濾
Commit Log
消息存放的物理文件,每臺broker上的commit log被本機所有的queue共享不做任何區分。消息存儲內容長度不固定,文件順序寫,隨機讀。