全部產品
Search
文件中心

ApsaraMQ for RocketMQ:訊息(Message)

更新時間:Oct 28, 2025

本文介紹雲訊息佇列 RocketMQ 版中訊息(Message)的定義、模型關係、內部屬性、行為約束及使用建議。

定義

訊息是雲訊息佇列 RocketMQ 版中的最小數據傳輸單元。生產者將業務資料的負載和拓展屬性包裝成訊息發送到雲訊息佇列 RocketMQ 版服務端,服務端按照相關語義將訊息投遞到消費端進行消費。

雲訊息佇列 RocketMQ 版的訊息模型具備如下特點:

  • 訊息不可變性

    訊息本質上是已經產生並確定的事件,一旦產生後,訊息的內容不會發生改變。即使經過傳輸鏈路的控制也不會發生變化,消費端擷取的訊息都是唯讀訊息視圖。

  • 訊息持久化

    雲訊息佇列 RocketMQ 版會預設對訊息進行持久化,即將接收到的訊息儲存到雲訊息佇列 RocketMQ 版服務端的隱藏檔中,保證訊息的可回溯性和系統故障情境下的可恢複性。

模型關係

在整個雲訊息佇列 RocketMQ 版的領域模型中,訊息所處的流程和位置如下:訊息

  1. 訊息由生產者初始化並發送到雲訊息佇列 RocketMQ 版服務端。

  2. 訊息按照到達雲訊息佇列 RocketMQ 版服務端的順序儲存到隊列中。

  3. 消費者按照指定的訂閱關係從雲訊息佇列 RocketMQ 版服務端中擷取訊息並消費。

訊息內部屬性

系統保留屬性

主題名稱

  • 定義:當前訊息所屬的主題的名稱。叢集內全域唯一。更多資訊,請參見主題(Topic)

  • 取值:從用戶端SDK介面擷取。

輕量主題名稱

  • 定義:當前訊息所屬的輕量主題的名稱。僅當主題類型為Lite時,所屬主題內全域唯一。更多資訊請參見輕量主題模型

  • 取值:從用戶端SDK介面擷取。

訊息類型

  • 定義:當前訊息的類型。

  • 取值:從用戶端SDK介面擷取。雲訊息佇列 RocketMQ 版支援的訊息類型如下:

    • Normal:普通訊息,訊息本身無特殊語義,訊息之間也沒有任何關聯。

    • FIFO:順序訊息雲訊息佇列 RocketMQ 版通過訊息分組MessageGroup標記一組特定訊息的先後順序,可以保證訊息的投遞順序嚴格按照訊息發送時的順序。

    • Delay:定時/延時訊息,通過指定延時時間控制訊息生產後不要立即投遞,而是在延時間隔後才對消費者可見。

    • Transaction:事務訊息雲訊息佇列 RocketMQ 版支援分散式交易訊息,支援應用程式資料庫更新和訊息調用的事務一致性保障。

    • Lite:輕量訊息,僅當取值為Lite時,允許在主題下使用輕量主題功能。

訊息佇列

  • 定義:實際儲存當前訊息的隊列。更多資訊,請參見隊列(MessageQueue)

  • 取值:由服務端指定並填充。

訊息位點

  • 定義:當前訊息儲存在隊列中的位置。更多資訊,請參見消費進度原理

  • 取值:由服務端指定並填充。取值範圍:0~long.Max。

訊息ID

  • 定義:訊息的唯一標識,叢集內每條訊息的ID全域唯一。

  • 取值:生產者用戶端系統自動產生。固定為數字和大寫字母組成的32位字串。

索引Key列表(可選)

  • 定義:訊息的索引鍵,可通過設定不同的Key區分訊息和快速尋找訊息。

  • 取值:由生產者用戶端定義。

過濾標籤Tag(可選)

  • 定義:訊息的過濾標籤。消費者可通過Tag對訊息進行過濾,僅接收指定標籤的訊息。

  • 取值:由生產者用戶端定義。

  • 約束:一條訊息僅支援設定一個標籤。

定時時間(可選)

  • 定義:定時情境下,訊息觸發延時投遞的毫秒級時間戳記。更多資訊,請參見定時/延時訊息

  • 取值:由訊息生產者定義。

  • 約束:

    • 訂用帳戶、隨用隨付標準版,Serverless標準版與專業版最大支援7天。

    • 訂用帳戶、隨用隨付專業版,鉑金版最大支援40天。

    詳細資料,請參見配額與限制

訊息發送時間

  • 定義:訊息發送時,生產者用戶端系統的本地毫秒級時間戳記。

  • 取值:由生產者用戶端系統填充。

  • 說明:用戶端系統時鐘和服務端系統時鐘可能存在偏差,訊息發送時間是以用戶端系統時鐘為準。

訊息儲存時間戳記

  • 定義:訊息在雲訊息佇列 RocketMQ 版服務端完成儲存時,服務端系統的本地毫秒級時間戳記。

    對於定時訊息和事務訊息,訊息儲存時間指的是訊息生效對消費方可見的服務端系統時間。

  • 取值:由服務端系統填充。

  • 說明:用戶端系統時鐘和服務端系統時鐘可能存在偏差,訊息保留時間是以服務端系統時鐘為準。

消費重試次數

  • 定義:訊息消費失敗後,雲訊息佇列 RocketMQ 版服務端重新投遞的次數。每次重試後,重試次數加1。更多資訊,請參見消費重試

  • 取值:由服務端系統標記。首次消費,重試次數為0;消費失敗首次重試時,重試次數為1。

業務自訂屬性

自訂屬性對

  • 定義:生產者可以自訂設定的擴充資訊。

  • 取值:由訊息生產者自訂,按照字串索引值對設定。

訊息負載

訊息負載

  • 定義:業務訊息的實際報文資料。

  • 取值:由生產者負責序列化編碼,按照二進位位元組傳輸。

  • 約束:請參見參數限制

行為約束

訊息大小不得超過其類型所對應的限制,否則訊息會發送失敗。

系統預設的訊息最大限制如下:

  • 普通和順序訊息:4 MB

  • 事務和定時或延時訊息:64 KB

使用建議

單條訊息不建議傳輸超大負載

作為一款訊息中介軟體產品,雲訊息佇列 RocketMQ 版一般傳輸的是都是業務事件數目據。單個原子訊息事件的資料大小需要嚴格控制,如果單條訊息過大容易造成網路傳輸層壓力,不利於異常重試和流量控制。

生產環境中如果需要傳輸超大負載,建議按照固定大小做報文拆分,或者結合檔案儲存體等方法進行傳輸。

訊息中轉時做好不可變設計

雲訊息佇列 RocketMQ 版服務端5.x版本中,訊息本身不可編輯,消費端擷取的訊息都是唯讀訊息視圖。

但在歷史版本3.x和4.x版本中訊息不可變性沒有強約束,因此如果您需要在使用過程中對訊息進行中轉操作,務必將訊息重新初始化。

  • 正確使用樣本如下:

    Message m = Consumer.receive();
    Message m2= MessageBuilder.buildFrom(m);
    Producer.send(m2);
  • 錯誤使用樣本如下:

    Message m = Consumer.receive();
    m.update();
    Producer.send(m);