全部產品
Search
文件中心

ApsaraMQ for RocketMQ:主題(Topic)

更新時間:Oct 28, 2025

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

定義

主題是雲訊息佇列 RocketMQ 版中訊息傳輸和儲存的頂層容器,用於標識同一類商務邏輯的訊息。

主題的作用主要如下:

  • 定義資料的分類隔離

    雲訊息佇列 RocketMQ 版的方案設計中,建議將不同業務類型的資料拆分到不同的主題中管理,通過主題實現儲存的隔離性和訂閱隔離性。

  • 定義資料的身份和許可權

    雲訊息佇列 RocketMQ 版的訊息本身是匿名無身份的,同一分類的訊息使用相同的主題來做身份識別和許可權管理。

模型關係

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

主題

主題是雲訊息佇列 RocketMQ 版的頂層儲存,所有訊息資源的定義都在主題內部完成,但主題是一個邏輯概念,並不是實際的訊息容器。

主題內部由一個或多個隊列組成,訊息的儲存和水平擴充能力最終是由隊列實現的;並且針對主題的所有約束和屬性設定,最終也是通過主題內部的隊列來實現。

當主題類型為Lite類型時,主題下可建立二級資源LiteTopic,每個LiteTopic預設由一個隊列組成。

概念說明

主題(Topic)

雲訊息佇列 RocketMQ 版中訊息傳輸和儲存的頂層容器,用於標識同一類商務邏輯的訊息。主題通過TopicName來做唯一標識和區分。

輕量主題(LiteTopic)

當主題類型為Lite類型時,主題下可建立輕量主題(LiteTopic),由Topic和LiteTopic共同唯一確認訊息的儲存容器,每個儲存容器預設由一個隊列組成。

內部屬性

主題名稱

  • 定義:主題的名稱,用於標識主題,主題名稱叢集內全域唯一。

  • 取值:由使用者建立主題時定義。

  • 約束:請參見參數限制

隊列列表

  • 定義:隊列作為主題的組成單元,是訊息儲存的實際容器,一個主題內包含一個或多個隊列,訊息實際儲存在主題的各隊列內。更多資訊,請參見隊列(MessageQueue)

  • 取值:系統根據隊列數量給主題分配隊列,隊列數量建立主題時定義。

  • 約束:一個主題內至少包含一個隊列。

訊息類型

  • 定義:主題所支援的訊息類型。

  • 取值:建立主題時選擇訊息類型。雲訊息佇列 RocketMQ 版支援的主題類型如下:

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

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

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

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

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

  • 約束:每個主題只支援一種訊息類型。

輕量主題到期時間

  • 定義:當前主題下二級LiteTopic資源到期時間。當輕量主題距離最近一次訊息寫入時間超過到期時間後,該輕量主題會被自動刪除。

  • 取值:單位為分鐘,取值為 30~720 或 -1。-1代表不會到期。

  • 使用限制:輕量主題到期時間僅在訊息類型為Lite時有效。

行為約束

訊息類型強制校正

雲訊息佇列 RocketMQ 版 5.x版本將訊息類型拆分到主題中進行獨立營運和處理,因此系統會對發送的訊息類型和主題定的訊息類型進行強制校正,若校正不通過,則訊息發送請求會被拒絕,並傳回型別不匹配異常。校正原則如下:

  • 訊息類型必須一致

    發送的訊息的類型,必須和目標主題定義的訊息類型一致。

  • 主題類型必須單一

    每個主題只支援一種訊息類型,不允許將多種類型的訊息發送到同一個主題中。

常見錯誤使用情境

  • 發送的訊息類型不匹配

    例如,建立主題時訊息類型定義為順序訊息,發送訊息時發送事務訊息到該主題中,此時訊息發送請求會被拒絕,並傳回型別不匹配異常。

  • 單一訊息主題混用

    例如,建立主題時訊息類型定義為普通訊息,發送訊息時同時發送普通訊息和順序訊息到該主題中,則順序訊息的發送請求會被拒絕,並傳回型別不匹配異常。

版本相容性

訊息類型的強制校正,僅針對雲訊息佇列 RocketMQ 版服務端5.x版本生效。

雲訊息佇列 RocketMQ 版服務端4.x版本執行個體未對訊息類型強制校正,但建議使用時保證訊息類型一致

使用建議

按照業務分類合理拆分主題

雲訊息佇列 RocketMQ 版的主題拆分設計應遵循大類統一原則,即將相同業務域內同一功能屬性的訊息劃分為同一主題。拆分主題時,您可以從以下角度考慮拆分粒度:

  • 訊息類型是否一致:不同類型的訊息,如順序訊息和普通訊息需要使用不同的主題。

  • 訊息業務是否關聯:如果業務沒有直接關聯,比如,淘寶交易訊息和盒馬物流訊息沒有業務交集,需要使用不同的訊息主題;同樣是淘寶交易訊息,女裝類訂單和男裝類訂單可以使用同一個主題。當然,如果業務量較大或其他子模組應用處理業務時需要進一步拆分訂單類型,您也可以將男裝訂單和女裝訂單的訊息拆分到兩個主題中。

  • 訊息量級是否一樣:數量級不同或時效性不同的業務訊息建議使用不同的主題,例如某些業務訊息量很小但是時效性要求很強,如果跟某些萬億級訊息量的業務使用同一個主題,會增加訊息的等待時間長度。

正確拆分樣本:線上商品購買情境下,訂單交易如訂單建立、支付、取消等流程訊息使用一個主題,物流相關訊息使用一個主題,積分管理相關訊息使用一個主題。

錯誤拆分樣本:

  • 拆分粒度過粗:會導致業務隔離性差,不利於獨立營運和故障處理。例如,所有交易訊息和物流訊息都共用一個主題。

  • 拆分粒度過細:會消耗大量佈景主題資源,造成系統負載過重。例如,按照使用者ID區分,每個使用者ID使用一個主題。

單一主題只收發一種類型訊息,避免混用

雲訊息佇列 RocketMQ 版主題的設計原則為通過主題隔離業務,不同商務邏輯的訊息建議使用不同的主題。同一商務邏輯訊息的類型都相同,因此,對於指定主題,應該只收發同一種類型的訊息。

主旨管理員盡量避免自動化機制

雲訊息佇列 RocketMQ 版架構中,主題屬於頂層資源和容器,擁有獨立的許可權管理、可觀測性指標採集和監控等能力,建立和管理主題會佔用一定的系統資源。因此,生產環境需要嚴格管理佈景主題資源,請勿隨意進行增、刪、改、查操作。