RocketMQ提供了哪些過濾機制?

前言

本篇文章比較簡單,分別介紹RocketMQ支持幾種過濾機制,其原理和使用。

RocketMQ 提供了多種消息過濾機制,幫根據業務需求高效篩選消息,可以減少不必要的消息傳輸和處理。以下是其核心過濾機制及使用場景:


1. Tag 標簽過濾

  • 原理
    每個消息發送時可附加一個 Tag(字符串標簽),消費者訂閱時指定一個或多個 Tag,Broker 會過濾出匹配 Tag 的消息投遞給消費者。
  • 使用方式
    • 生產者:發送消息時設置 setTags
      Message msg = new Message("TopicTest", "TagA", "Hello RocketMQ".getBytes());
      
    • 消費者:訂閱時指定 Tag(支持 * 表示全部,|| 表示或關系)。
      consumer.subscribe("TopicTest", "TagA || TagB");
      
  • 特點
    • 高效:Broker 端過濾,性能損耗低。
    • 簡單:僅支持精確匹配,適用于簡單分類場景(如訂單狀態分類)。

2. SQL92 屬性過濾

  • 原理
    基于消息的 自定義屬性(Key-Value),通過 SQL 表達式進行復雜條件過濾(如數值比較、邏輯運算)。需開啟 Broker 的 enablePropertyFilter=true
  • 使用方式
    • 生產者:為消息添加自定義屬性。
      Message msg = new Message("TopicTest", "TagA", "Hello RocketMQ".getBytes());
      msg.putUserProperty("a", "10");
      msg.putUserProperty("b", "5");
      
    • 消費者:訂閱時編寫 SQL 表達式。
      consumer.subscribe("TopicTest", MessageSelector.bySql("a > 5 AND b = '5'"));
      
  • 特點
    • 靈活:支持復雜邏輯(如 >, <, BETWEEN, IS NULL 等)。
    • 性能損耗:相比 Tag 過濾略高,需評估表達式復雜度。

3. 類過濾(Class Filter)

  • 原理
    允許用戶自定義 Java 類實現過濾邏輯,Broker 加載該類并調用其方法判斷消息是否投遞。適用于高度定制化的過濾需求。
  • 使用方式
    • 實現接口:編寫類實現 org.apache.rocketmq.common.filter.MessageFilter
      public class CustomFilter implements MessageFilter {@Overridepublic boolean match(MessageExt msg, FilterContext context) {// 自定義過濾邏輯return msg.getUserProperty("region").equals("CN");}
      }
      
    • 部署類:將編譯后的類文件上傳到 Broker 指定路徑(需配置 filterSupportRetry=true)。
    • 消費者訂閱:指定過濾類名。
      consumer.subscribe("TopicTest", MessageSelector.byFilterClass("com.example.CustomFilter"));
      
  • 特點
    • 高度靈活:可編寫任意復雜邏輯(如結合外部配置或數據庫)。
    • 維護成本高:需管理類的版本和部署,適合有特殊需求的場景。

對比與選型建議

機制性能靈活性適用場景
Tag 過濾低(精確匹配)簡單分類(如訂單狀態、日志類型)
SQL92復雜屬性條件(如價格范圍、地域)
類過濾極高(自定義)特殊邏輯(需動態規則或外部查詢)

注意事項

  1. Broker 配置:SQL 和類過濾需 Broker 開啟支持(enablePropertyFilterfilterSupportRetry)。
  2. 版本兼容性:SQL92 過濾需 RocketMQ 4.3.0+,類過濾需 4.6.0+。
  3. 生產環境慎用類過濾:頻繁更新過濾類可能導致服務中斷,建議優先使用 Tag 或 SQL 過濾。

通過合理選擇過濾機制,可以顯著提升消息系統的效率和可維護性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897275.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis數據結構深度解析:從String到Stream的奇幻之旅(一)

Redis系列文章 《半小時掌握Redis核心操作&#xff1a;從零開始的實戰指南》-CSDN博客 Redis數據結構深度解析&#xff1a;從String到Stream的奇幻之旅&#xff08;一&#xff09;-CSDN博客 Redis數據結構深度解析&#xff1a;從String到Stream的奇幻之旅&#xff08;二&…

【Java開發指南 | 第三十五篇】Maven + Tomcat Web應用程序搭建

讀者可訂閱專欄&#xff1a;Java開發指南 |【CSDN秋說】 文章目錄 前言Maven Tomcat Web應用程序搭建1、使用Maven構建新項目2、單擊項目&#xff0c;連續按兩次shift鍵&#xff0c;輸入"添加"&#xff0c;選擇"添加框架支持"3、選擇Java Web程序4、點擊&…

機器始終是一個機器:技術本質與哲學邊界

機器始終是一個機器&#xff1a;技術本質與哲學邊界 這句話揭示了人工智能發展中的核心矛盾——無論技術如何進步&#xff0c;機器的本質仍是基于規則與數據的計算系統。這種「機器性」既是其能力的源泉&#xff0c;也是其與生命體智能不可逾越的邊界的根源。以下從技術本質、…

JAVA編程【jvm垃圾回收的差異】

jvm垃圾回收的差異 JVM&#xff08;Java Virtual Machine&#xff09;的垃圾回收&#xff08;GC&#xff09;機制是自動管理內存的一種方式&#xff0c;能夠幫助開發者釋放不再使用的內存&#xff0c;避免內存泄漏和溢出等問題。不同的垃圾回收器&#xff08;GC&#xff09;有…

親測解決筆記本觸摸板使用不了Touchpad not working

這個問題可以通過FnFxx來解決&#xff0c;筆記本鍵盤上Fxx會有一個觸摸板圖標。如果不行應該玉藻設置中關了&#xff0c;打開即可。 解決辦法 在藍牙&#xff0c;觸摸板里打開即可。 Turn it on in settings。

RAG技術深度解析:從基礎Agent到復雜推理Deep Search的架構實踐

重磅推薦專欄: 《大模型AIGC》 《課程大綱》 《知識星球》 本專欄致力于探索和討論當今最前沿的技術趨勢和應用領域,包括但不限于ChatGPT和Stable Diffusion等。我們將深入研究大型模型的開發和應用,以及與之相關的人工智能生成內容(AIGC)技術。通過深入的技術解析和實踐經…

數據結構篇——串(String)

一、引入 在計算機中的處理的數據內容大致可分為以整形、浮點型等的數值處理和字符、字符串等的非數值處理。 今天我們主要學習的就是字符串數據。本章主要圍繞“串的定義、串的類型、串的結構及其運算”來進行串介紹與學習。 二、串的定義 2.1、串的基本定義 串&#xff08;s…

【智能體架構:Agent】LangChain智能體類型ReAct、Self-ASK的區別

1. 什么是智能體 將大語言模型作為一個推理引擎。給定一個任務&#xff0c; 智能體自動生成完成任務所需步驟&#xff0c; 執行相應動作&#xff08;例如選擇并調用工具&#xff09;&#xff0c; 直到任務完成。 2. 先定義工具&#xff1a;Tools 可以是一個函數或三方 API也…

OmniParser技術分析(一)

1.引言 通過上篇文章介紹 OmniParser:下一代純視覺UI自動化測試先驅相信大家已經對OmniParser有初步了解&#xff0c;接下來詳細介紹下OmniParser使用了哪些技術模型實現了對UI純視覺的檢測和理解。 2.整體方案 通過閱讀OmniParser提供的運行Demo代碼知道&#xff0c;其實整…

設計心得——繼承和實例

一、繼承的應用場景 在上篇文章分析了繼承的應用&#xff0c;本文反過來講繼承和實例。可以理解對上文的繼承進行一下基礎知識的鋪墊&#xff0c;繼承的應用場景非常多&#xff0c;典型的應用場景包括&#xff1a; 1、單純屬性的繼承 這種繼承非常常見&#xff0c;在前面也舉過…

從連接到交互:SDN 架構下 OpenFlow 協議的流程與報文剖析

在SDN架構中&#xff0c;交換機與控制器之間的通信基于 OpenFlow協議&#xff0c;其設計目的是實現控制平面與數據平面的解耦。以下是 交換機連接控制器 和 數據包進入交換機觸發交互 的詳細流程及協議報文分析&#xff1a; 一、交換機連接控制器的流程&#xff08;初始化階段&…

opentitan riscv

OpenTitan?是一個開源的硅根信任&#xff08;Root of Trust, RoT&#xff09;項目&#xff0c;旨在使硅RoT的設計和實現更加透明、可信和安全&#xff0c;適用于企業、平臺提供商和芯片制造商。該項目由lowRISC CIC管理&#xff0c;作為一個協作項目&#xff0c;旨在生產高質量…

R語言使用scitable包交互效應深度挖掘一個陌生數據庫

很多新手剛才是總是覺得自己沒什么可以寫的&#xff0c;自己不知道選什么題材進行分析&#xff0c;使用scitable包后這個完全不用擔心&#xff0c;選題多到你只會擔心你寫不完&#xff0c;寫得不夠快。 今天演示一下使用scitable包深度挖掘一個陌生數據庫 先導入R包和數據 li…

電腦內存智能監控清理,優化性能的實用軟件

軟件介紹 Memory cleaner是一款內存清理軟件。功能很強&#xff0c;效果很不錯。 Memory cleaner會在內存用量超出80%時&#xff0c;自動執行“裁剪進程工作集”“清理系統緩存”以及“用全部可能的方法清理內存”等操作&#xff0c;以此來優化電腦性能。 同時&#xff0c;我…

C#控制臺應用程序學習——3.8

一、語言概述 1、平臺相關性 C# 主要運行在.NET 平臺上。.NET 提供了一個龐大的類庫&#xff0c;C# 程序可以方便地調用這些類庫來實現各種功能&#xff0c;如文件操作、數據庫訪問、網絡通信等。 2、語法風格 C# 的語法與 C、C 和 Java 有一定的相似性。例如&#xff0c;它使用…

鴻蒙HarmonyOS-Navagation基本用法

Navagation基本用法 Navigation組件是路由導航的根視圖容器&#xff0c;一般作為Page頁面的根容器使用&#xff0c;其內部默認包含了標題欄&#xff0c;內容欄和公工具欄&#xff0c;其中內容區默認首頁顯示導航內容&#xff08;Navigation的子組件&#xff09;或非首頁顯示&am…

初階數據結構(C語言實現)——4.1棧

目錄 1.棧1.1棧的概念及結構1.2 棧的實現1.1.0 棧的初始化1.1.1 銷毀1.1.2 入棧1.1.3 出棧1.1.4 獲取棧中有效元素個數1.1.5 檢測棧是否為空&#xff0c;如果為空返回非零結果&#xff0c;如果不為空返回01.1.6 獲取棧頂元素1.1.7 驗證 附錄 棧的C語言實現源碼.h文件.c文件test…

計算光學成像與光學計算概論

計算光學成像所涉及研究的內容非常廣泛&#xff0c;雖然計算光學成像的研究內容是發散的&#xff0c;但目的都是一致的&#xff1a;如何讓相機記錄到客觀實物更豐富的信息&#xff0c;延伸并擴展人眼的視覺感知。總的來說&#xff0c;計算光學成像現階段已經取得了很多令人振奮…

什么樣的物聯網框架適合開展共享自助KTV唱歌項目?

現在物聯網的廣泛應用&#xff0c;也讓更多用戶們看到了它的實力&#xff0c;也使得共享經濟遍地開花。其中共享自助唱歌設備也備受歡迎&#xff0c;那么適合開展共享自助KTV唱歌項目的物聯網框架都應具備哪些特點呢&#xff1f; 智能化與自動化管理 物聯網技術在共享KTV中的應…

機器視覺選型中,不同焦距的鏡頭成像視野有什么不同?

不同焦距的鏡頭成像視野的差異主要體現在視角范圍和透視效果上。焦距越長&#xff0c;視角越窄&#xff0c;能捕捉的景物范圍越小&#xff1b;焦距越短&#xff0c;視角越廣&#xff0c;覆蓋的景物范圍越大。以下是具體分析&#xff1a; 焦距與視角的關系 焦距&#xff08;Foc…