RocketMQ 主題與隊列的協同作用解析(既然隊列存儲在不同的集群中,那要主題有什么用呢?)---管理命令、配置安裝

?學習之前呢需要會使用linux的基礎命令

一.RocketMQ 主題與隊列的協同作用解析

在 RocketMQ 中,?主題(Topic)?與?隊列(Queue)?的協同設計實現了消息系統的邏輯抽象與物理存儲分離。雖然隊列實際存儲在不同集群的 Broker 節點上,但主題作為邏輯層面的核心單元,仍具有不可替代的作用:

1. ?主題是消息的邏輯分類與路由標識?
  • ?邏輯聚合?:主題將同一類業務消息聚合為邏輯單元(例如訂單消息歸入?OrderTopic),生產者只需關注發送到哪個主題,無需感知底層隊列的物理分布。
  • ?路由依據?:消息通過主題名稱路由到對應集群的隊列中。例如,生產者發送到?PaymentTopic?的消息會被自動分配到該主題關聯的隊列(可能分布在多個集群)。
  • ?跨集群協同?:若隊列分布在多個集群,主題的元數據(如隊列分布規則)由 NameServer 統一管理,確保生產者/消費者能準確找到目標隊列。

2. ?主題實現消息的訂閱與消費隔離?
  • ?訂閱關系管理?:消費者通過訂閱主題來接收消息,而非直接綁定隊列。即使隊列分布在多個集群,消費者組仍可通過主題名稱統一訂閱,RocketMQ 自動完成隊列分配和負載均衡。
  • ?權限控制?:主題支持獨立的權限配置(如讀寫權限),實現不同業務消息的訪問隔離。例如,財務系統僅能訪問?FinanceTopic,與訂單系統隔離。
  • ?Tag 過濾擴展?:在主題基礎上,通過 Tag 進一步細分消息類型(如?OrderTopic:TagA),消費者可選擇性訂閱特定 Tag,減少無關消息處理。

3. ?主題為運維提供統一管理入口?
  • ?隊列動態擴展?:當集群擴容時,通過調整主題的隊列數量(如從 8 隊列增至 16 隊列),新隊列可自動分配到新增集群的 Broker,無需修改業務代碼。
  • ?監控與告警?:主題級別的監控指標(如消息堆積量、消費 TPS)便于快速定位問題。例如,InventoryTopic?的消費延遲告警可直接關聯到庫存業務。
  • ?數據生命周期?:主題支持獨立的消息保留策略(如保存 3 天),不同業務可按需配置,避免全局策略的局限性。
4. ?主題與隊列的協同模型?
?維度??主題(Topic)??隊列(Queue)?
?定位?邏輯分類單元,定義消息身份與權限物理存儲單元,實際承載消息數據
?擴展性?通過增加隊列數量實現橫向擴展依賴 Broker 集群擴容提升單隊列容量
?消費模式?支持集群消費(單隊列單消費者)或廣播消費僅作為存儲載體,不直接決定消費模式
?運維操作?配置權限、Tag 規則、保留策略等調整副本數、存儲路徑、故障遷移等

實際場景示例

  • ?場景?:電商系統的訂單消息(OrderTopic)需要支持每秒 10 萬條吞吐量。
  • ?實現?:
    1. 創建?OrderTopic?并設置 32 個隊列。
    2. 將隊列分布在 4 個集群的 Broker 節點上(每個集群 8 隊列)。
    3. 消費者組訂閱?OrderTopic,RocketMQ 自動將 32 個隊列均分給消費者實例。
    4. 當某個集群故障時,NameServer 將故障隊列的路由指向其他集群的副本隊列,保障高可用

小結

主題的核心價值在于?邏輯抽象?,它屏蔽了底層隊列的物理復雜性,同時提供業務層面的統一管理入口。隊列的分布式存儲解決的是?性能與可靠性問題?,而主題則定義了消息的?業務語義與協作規則?,兩者共同構成 RocketMQ 高并發、高可用的基石。

二.RocketMQ管理命令?

1、updateTopic

作用:修改或創建一個Topic

命令:mqadmin updateTopic -b | -c [-h] [-n ] [-o ] [-p ] [-r ] [-s ] -t [-u ] [-w ]

參數:

  • -n: name server地址列表
  • -c: cluster 名稱,表示topic 建在該集群
  • -t: 設置topic名稱
  • -h: 打印help信息
  • -o: 設置topic是否為有序的 取值:true、false(默認)
  • -p: 設置topic的權限

示例:?

?mqadmin updateTopic -n localhost:9876 -c DefaultCluster -t testtopic

2、deleteTopic

作用:從broker和nameserver刪除topic?

命令:mqadmin deleteTopic -c [-h] [-n ] -t

參數:

  • -n: name server地址列表
  • -c: cluster 名稱,表示topic 建在該集群
  • -t: 設置topic名稱
  • -h: 打印help信息

示例

mqadmin deleteTopic -n localhost:9876 -c DefaultCluster -t testtopic

3、topicList

作用:從nameserver列出所有topic

命令:mqadmin topicList [-c] [-h] [-n ]

參數:

  • -n: name server地址列表
  • -c: cluster 名稱,表示topic 建在該集群
  • -h: 打印help信息

示例

mqadmin topicList -n localhost:9876

4、topicStatus

作用:檢查topic的狀態信息

命令:mqadmin topicStatus [-h] [-n ] -t

參數:

  • -n: name server地址列表
  • -c: cluster 名稱,表示topic 建在該集群
  • -t: 設置topic名稱
  • -h: 打印help信息

?示例

mqadmin topicStatus -n localhost:9876 -t testtopic

5、cleanUnusedTopic

作用:清理未使用的topic

命令:mqadmin cleanUnusedTopic [-b ] [-c ] [-h] [-n ]

參數:

  • -n: name server地址列表
  • -b: broker地址
  • -c: 集群名稱
  • -h: 打印help信息

6關閉namesrv和broker服務

mqshutdown namesrv

mqshutdown broker

三.RocketMQ安裝與配置?

1、首先修改環境變量?

vim /etc/profile
# 文件末尾追加改信息
export ROCKETMQ_HOME=/usr/local/rocketmq
export PATH=$PATH:$ROCKETMQ_HOME/bin
# 生效環境變量
source /etc/profile

2、解壓文件

unzip rocketmq-all-5.1.4-bin-release.zip

我們上傳安裝包至opt目錄下,使用該命令將其解壓至opt目錄下,最后使用mv命令對其進行位置移動和改名-----/usr/local/rocketmq

# 解壓到當前目錄(/opt)
unzip rocketmq-all-5.0.0-bin-release.zip# 將解壓后的目錄移動到/usr/local
mv rocketmq-all-5.0.0-bin-release /usr/local/# 改名
mv rocketmq-all-5.0.0-bin-release rocketmq

?進入bin目錄如下

3、啟動NameServer?

nohup sh mqnamesrv &

?

4、啟動broker?

nohup sh ./mqbroker -n localhost:9876 &?

使用jps命令查看后發現broker未啟動

啟動成功后的輸出結果?

使用 cat nohup.out?查看日志如下

?很常見的問題

1、java.lang.IllegalAccessError: class org.apache.rocketmq.common.UtilAll (in unnamed module @0x58acb723) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module?

解決:添加啟動參數

修改runbroker文件,添加紅色參數?$JAVA ${JAVA_OPT} --add-exports=java.base/sun.nio.ch=ALL-UNNAMED $@

2、堆空間初始值太大也報錯?

修改文件runbroker.sh(將光標位置修改為如下數字即可)

通過上述修改,將初始堆內存512M,最大堆內存設置為512M,新生代(Java中用于存儲創建對象的部分)設置為256M,修改完成后便可以正常啟動以及查看日志。?

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

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

相關文章

三菱FX PLC頻率采集

基于高速計數器,計算從X點輸入方波個數,定時提取計數器值,換算得到頻率。直接通過定時器數值判斷來實現定時計數的精度不高,提高精度需要考慮定時中斷方式。 初始化寄存器,通過M8235,M8236復位來選擇C235&a…

一種專用車輛智能配電模塊的設計解析:技術革新與未來展望

關鍵詞:智能配電模塊、STM32、CAN總線、電子開關、新能源汽車 引言:傳統配電系統的痛點與智能化轉型 傳統配電系統依賴繼電器和保險絲,存在體積大、壽命短、智能化低等缺陷(如圖1)。而新能源汽車和無人駕駛技術對配電…

python——異常

1、定義 異常是在代碼執行過程中發生的,它會影響到程序的正常運行。python程序不會自動來進行異常處理。python中常見異常父類:Exception。 2、常見異常 TypeError:類型錯誤異常。ValueError:值的異常。KeyError:鍵…

深入淺出Sentinel:分布式系統的流量防衛兵

引言 在當今的微服務架構和分布式系統中,服務間的依賴關系錯綜復雜,一個服務的故障可能會像多米諾骨牌一樣引發整個系統的崩潰。如何有效地保護系統免受突發流量、不穩定依賴服務的影響,成為每個架構師和開發者必須面對的挑戰。今天&#xf…

leetcode0106. 從中序與后序遍歷序列構造二叉樹-medium

1 題目:從中序與后序遍歷序列構造二叉樹 官方標定難度:中 給定兩個整數數組 inorder 和 postorder ,其中 inorder 是二叉樹的中序遍歷, postorder 是同一棵樹的后序遍歷,請你構造并返回這顆 二叉樹 。 示例 1: 輸入…

【Pandas】pandas DataFrame rsub

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于執行 DataFrame 與另一個對象(如 DataFrame、Series 或標量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于執行 DataFrame 與另一個對象&…

【信息系統項目管理師】高分論文:論人力資源管理與成本管理(醫院信息系統)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 論文一、規劃人力資源管理二、組建項目團隊三、建設項目團隊四、管理項目團隊論文 一個完善的醫院信息系統通常由上百個子系統構成,而這些系統隨著醫院發展需求逐步建設的,他們來源于不同廠家,基于不同的技…

【python】如何將python程序封裝為cpython的庫

python程序在發布時,往往會打包為cpython的庫,并且根據應用服務器的不同架構(x86/aarch64),以及python的不同版本,封裝的輸出類型也是非常多。本文介紹不同架構指定python下的代碼打包方式: 首…

Android 14 修改側滑手勢動畫效果

涉及關鍵類 SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt 修改如下: 一,覆蓋系統的默認手勢效果 SystemUI/src/com/andro…

RHEL與CentOS:從同源到分流的開源操作系統演進

RHEL與CentOS:從同源到分流的開源操作系統演進 一、核心關系:源代碼的重構與社區化 RHEL(Red Hat Enterprise Linux)與CentOS(Community ENTerprise Operating System)的關系可以概括為“同源異構”。RHE…

EFISH-SBC-RK3588 —— 厘米級定位 × 旗艦算力 × 工業級可靠?

一、核心參數速覽? ?類別? ?技術規格? ?處理器? RK3588 八核(4Cortex-A762.4GHz 4Cortex-A551.8GHz) Mali-G610 GPU 6 TOPS NPU ?定位能力? 雙天線差分 GNSS(GPS/北斗/GLONASS/Galileo),支持 RTK 動態…

【Unity 與c++通信】Unity與c++通信注意事項,參數傳遞

一、在Unity中使用c代碼 Unity想調用C代碼,則需要c開發人員打包成so庫。 在Unity中通過DllImport,和dll一樣調用。 需要注意的點: C代碼需要extern"C"來封裝成dll 因為unity默認使用c語言調用外部接口,會對c代碼進行命…

DeepSeek+Mermaid:輕松實現可視化圖表自動化生成(附實戰演練)

目錄 一、引言:AI 與圖表的夢幻聯動二、DeepSeek:大語言模型新星崛起2.1 DeepSeek 全面剖析2.2 多場景應用示例2.2.1 文本生成2.2.2 代碼編寫 三、Mermaid:代碼式圖表繪制專家3.1 Mermaid 基礎探秘3.2 語法與圖表類型詳解3.2.1 流程圖&#x…

霍格軟件測試-JMeter高級性能測試一期

課程大小:32.2G 課程下載:https://download.csdn.net/download/m0_66047725/90631395 更多資源下載:關注我 當下BAT、TMD等互聯網一線企業已幾乎不再招募傳統測試工程師,而只招測試開發工程師!在軟件測試技術棧迭代…

【Python數據庫編程實戰】從SQL到ORM的完整指南

目錄 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊說明技術選型對比 二、實戰演示環境配置要求核心代碼實現案例1:SQLite基礎操作案例2:MySQL連接池案例3:SQLAlchemy ORM …

第1講|R語言繪圖體系總覽(Base、ggplot2、ComplexHeatmap等)

目錄 第1講|R語言繪圖體系總覽 ? 引言:為什么R繪圖如此重要? ?? 1. Base繪圖系統 ?? 2. ggplot2生態系統 ?? 3. ComplexHeatmap超級熱圖系統 ?? 4. 其他特色繪圖庫(快速了解) ?? 小結一句話 ?? 預告下一講 第1講|R語言繪圖體系總覽 (Base、ggplot…

銀行卡歸屬地查詢的快速入門:API接口性能與安全兼備的高效實現

在金融和支付領域,獲取銀行卡的歸屬信息是一個常見的需求。**萬維易源提供的“銀行卡歸屬信息查詢”API為開發者和企業提供了高效、便捷的銀行卡信息查詢服務,可以通過簡單的接口調用獲取銀行卡的歸屬地、銀行名稱、電話號碼、網址、卡種、銀聯Luhn效驗和…

如何把兩個視頻合并成一個視頻?無需視頻編輯器即可搞定視頻合并

在日常生活中,我們經常需要將多個視頻片段合并成一個完整的視頻,例如制作旅行記錄、剪輯教學視頻或拼接短視頻素材。簡鹿視頻格式轉換器是一款功能強大的工具,不僅可以進行視頻格式轉換,還支持視頻合并功能。以下是使用簡鹿視頻格…

Android-KeyStore安全的存儲系統

? 在 Android 中,AndroidKeyStore 是一個安全的存儲系統,用于存儲加密密鑰。它提供了一種安全的方式來生成、存儲和管理密鑰,而無需將密鑰暴露給應用程序本身。以下是如何使用 AndroidKeyStore 的基本步驟和示例代碼。 檢查 AndroidKeyStor…

YOLOv12 改進有效系列目錄 - 包含卷積、主干、檢測頭、注意力機制、Neck上百種創新機制 - 針對多尺度、小目標、遮擋、復雜環境、噪聲等問題!

🔥 在 YOLO 系列一路狂飆之后,YOLOv12 帶來了令人耳目一新的范式轉變——它不再以 CNN 為絕對核心,而是首次 圍繞注意力機制構建 YOLO 框架,在保證實時性的前提下,將檢測精度再次推向新高度! 為了進一步探…