全部產品
Search
文件中心

ApsaraMQ for RocketMQ:訂閱關係(Subscription)

更新時間:Oct 28, 2025

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

定義

訂閱關係是雲訊息佇列 RocketMQ 版系統中消費者擷取訊息、處理訊息的規則和狀態配置。

訂閱關係由消費者分組動態註冊到服務端系統,並在後續的訊息傳輸中按照訂閱關係定義的過濾規則進行訊息匹配和消費進度維護。

通過配置訂閱關係,可控制如下傳輸行為:

  • 訂閱訊息的集合:用於控制消費者訂閱哪些訊息,選擇主題內的哪些訊息進行消費。

  • 消費進度:雲訊息佇列 RocketMQ 版服務端預設提供訂閱關係持久化的能力,即消費者分組在服務端註冊訂閱關係後,當消費者離線並再次上線後,可以擷取離線前的消費進度並繼續消費。

Topic和ConsumerGroup的映射關係

一個Topic可以被多個ConsumerGroup訂閱

一對多訂閱能力,每個ConsumerGroup對Topic的訂閱相互獨立,都可以訂閱Topic下的全部或部分訊息。

image.png

一個ConsumerGroup可以訂閱多個Topic

如下圖所示,消費者分組Group A訂閱了兩個主題Topic A和Topic B,對於Group A中的消費者來說,訂閱的Topic A為一個訂閱關係,訂閱的Topic B為另外一個訂閱關係,且這兩個訂閱關係互相獨立,可以各自訂,不受影響。

image.png

內部屬性

消費模式

  • 定義:消費者對訊息的消費模式

  • 取值:

    • CLUSTERING:用於訂閱非Lite類型的其它類型Topic。訊息會按照負載平衡規則,投遞ConsumerGroup下的其中一個消費者。

    • LITE_SELECTIVE:用於訂閱Lite類型的Topic,一個ConsumerGroup下的不同的消費者可以訂閱不同的LiteTopic集合。

訊息過濾屬性

當消費模式為CLUSTERING時,可以使用訊息過濾相關配置。

過濾類型

  • 定義:訊息過濾規則的類型。訂閱關係中設定訊息過濾規則後,系統將按照過濾規則匹配主題中的訊息,只將合格訊息投遞給消費者消費,實現訊息的再次分類。

  • 取值:

    • TAG過濾:按照Tag字串進行全文過濾匹配。

    • SQL92過濾:按照SQL文法對訊息屬性進行過濾匹配。

過濾運算式

行為約束

消費模式為CLUSTERING時

當消費模式為CLUSTERING時,同一個ConsumerGroup下的每個消費者的訂閱關係、消費邏輯需要保持一致,否則會出現消費衝突,導致部分訊息消費異常。

  • 正確樣本

    //Consumer c1
    Consumer c1 = ConsumerBuilder.build(groupA);
    c1.subscribe(topicA,"TagA");
    //Consumer c2
    Consumer c2 = ConsumerBuilder.build(groupA);
    c2.subscribe(topicA,"TagA");
  • 錯誤樣本

    //Consumer c1
    Consumer c1 = ConsumerBuilder.build(groupA);
    c1.subscribe(topicA,"TagA");
    //Consumer c2
    Consumer c2 = ConsumerBuilder.build(groupA);
    c2.subscribe(topicA,"TagB");

消費模式為LITE_SELECTIVE時

當消費模式為LITE_SELECTIVE時,同一個ConsumerGroup下的不同的消費者可以訂閱不同的LiteTopic集合。如下圖所示,消費者1訂閱了 LiteTopic1和LiteTopic2,消費者2訂閱了 LiteTopic3和LiteTopic4。

每個消費者訂閱LiteTopic集合可以即時地動態增加和刪除。

image.png