跳至主要內容
版本:5.0

訂閱

本節說明 Apache RocketMQ 中訂閱的定義、模型關係、內部屬性和使用說明。

定義

訂閱是消費者在 Apache RocketMQ 中取得並處理訊息的規則和狀態設定。

訂閱由消費者群組動態註冊到代理程式。然後,訊息會根據訂閱定義的篩選規則進行比對和使用。

透過設定訂閱,您可以控制下列訊息行為

  • 訊息篩選規則:這些規則用於定義主題中哪些訊息會由消費者使用。透過設定訊息篩選規則,消費者可以有效取得他們想要的訊息,並根據不同的業務情境指定訊息接收範圍。如需更多資訊,請參閱訊息篩選

  • 使用狀態:預設情況下,Apache RocketMQ 代理程式提供持續性訂閱。換句話說,在消費者群組訂閱代理程式後,群組中的消費者可以在重新連線後從消費者中斷的地方繼續使用訊息。

決定訂閱的規則

Apache RocketMQ 的訂閱是根據消費者群組和主題設計的。因此,訂閱是指指定消費者群組對主題的訂閱。以下是決定訂閱的規則

  • 一個主題對多個訂閱者下圖顯示兩個消費者群組(群組 A 和群組 B)訂閱主題 A。這兩個訂閱彼此獨立,可以分別定義。 訂閱關係以不同的方式分組

  • 一個訂閱者訂閱多個主題下圖顯示一個消費者群組(群組 A)訂閱兩個主題:主題 A 和主題 B。群組 A 中的消費者對主題 A 和主題 B 有兩個獨立的訂閱。這兩個訂閱彼此獨立,可以分別定義。訂閱關係以不同的方式分組

模型關係

下圖顯示 Apache RocketMQ 領域模型中訂閱的位置。訂閱

  1. 訊息由生產者初始化,並傳送至 Apache RocketMQ 伺服器。

  2. 訊息儲存在主題的指定佇列中,依據其抵達 Apache RocketMQ 伺服器的順序。

  3. 消費者根據指定的訂閱關係從 Apache RocketMQ 伺服器取得並使用訊息。

內部屬性

過濾器類型

  • 定義:訊息過濾器規則的類型。為訂閱設定訊息過濾器規則後,系統會根據過濾器規則比對主題中的訊息。只有符合條件的訊息才會傳遞給消費者。此功能可協助您根據需求分類傳送給消費者的訊息。

    • 標籤過濾器:根據標籤字串過濾和比對全文。

    • SQL92 過濾器:根據 SQL 語法過濾和比對訊息屬性。

過濾器表達式

行為限制

訂閱一致性

Apache RocketMQ 根據消費者群組管理訂閱。因此,同一個消費者群組中的消費者必須維持相同的消費邏輯。否則,會發生消費衝突,進而導致某些訊息被錯誤使用。

  • 正確範例

    //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 c2Consumer
    c2 = ConsumerBuilder.build(groupA);
    c2.subscribe(topicA,"TagB");

使用注意事項

不要頻繁修改訂閱。

在 Apache RocketMQ 中,訂閱與元資料和組態相關聯,例如過濾規則和消費進度。系統還必須確保消費者群組中所有消費者的消費行為、消費邏輯和負載政策一致。這些因素導致需要管理的複雜關係網。因此,我們建議您不要定期修改訂閱以變更生產環境中的業務邏輯。否則,用戶端需要不斷調整其負載分配,這會導致訊息接收問題。