在消息隊列RocketMQ版中,Topic與Tag都是業務上用來歸類的標識,區分在于Topic是一級分類,而Tag可以理解為是二級分類。您可通過本文了解如何搭配使用Topic和Tag來實現消息過濾。
背景信息
Topic和Tag的定義如下:
- Topic
- 消息主題,通過Topic對不同的業務消息進行分類。
- Tag
- 消息標簽,用來進一步區分某個Topic下的消息分類,消息從生產者發出即帶上的屬性。
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實現消息過濾,請參見消息過濾。