消息隊列rocketmq:Topic 與 Tag 最佳實踐

在消息隊列 RocketMQ 版中,Topic 與 Tag 都是業務上用來歸類的標識,區分在於 Topic 是一級分類,而 Tag 可以理解爲是二級分類。您可通過本文了解如何搭配使用 Topic 和 Tag 來實現消息過濾。

背景信息

Topic 和 Tag 的定義如下:

Topic

消息主題,通過 Topic 對不同的業務消息進行分類。

Tag

消息標籤,用來進一步區分某個 Topic 下的消息分類,消息從生產者發出即帶上的屬性。

Topic 和 Tag 的關係如下圖所示。

mq中Topic和Tag的關係

適用場景

您可能會有這樣的疑問:到底什麼時候該用 Topic,什麼時候該用 Tag?

建議您從以下幾個方面進行判斷:

  • 消息類型是否一致:如普通消息、事務消息、定時(延時)消息、順序消息,不同的消息類型使用不同的 Topic,無法通過 Tag 進行區分。
  • 業務是否相關聯:沒有直接關聯的消息,如淘寶交易消息,京東物流消息使用不同的 Topic 進行區分;而同樣是天貓交易消息,電器類訂單、女裝類訂單、化妝品類訂單的消息可以用 Tag 進行區分。
  • 消息優先級是否一致:如同樣是物流消息,盒馬必須小時內送達,天貓超市 24 小時內送達,淘寶物流則相對會慢一些,不同優先級的消息用不同的 Topic 進行區分。
  • 消息量級是否相當:有些業務消息雖然量小但是實時性要求高,如果跟某些萬億量級的消息使用同一個 Topic,則有可能會因爲過長的等待時間而“餓死”,此時需要將不同量級的消息進行拆分,使用不同的 Topic。

總的來說,針對消息分類,您可以選擇創建多個 Topic,或者在同一個 Topic 下創建多個 Tag。但通常情況下,不同的 Topic 之間的消息沒有必然的聯繫,而 Tag 則用來區分同一個 Topic 下相互關聯的消息,例如全集和子集的關係、流程先後的關係。

場景示例

以天貓交易平臺爲例,訂單消息和支付消息屬於不同業務類型的消息,分別創建 Topic_Order 和 Topic_Pay,其中訂單消息根據商品品類以不同的 Tag 再進行細分,列如電器類、男裝類、女裝類、化妝品類等被各個不同的系統所接收。

通過合理的使用 Topic 和 Tag,可以讓業務結構清晰,更可以提高效率。

如何通過 Tag 實現消息過濾,請參見消息過濾

引自官方文檔:https://help.aliyun.com/document_detail/95837.html?spm=a2c4g.11186623.3.2.70c63702wOKFH3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章