最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker?部署?RocketMQ?5的完整教程

 更新時間:2026年04月20日 08:47:51   作者:鮑憲立  
本文教程詳細(xì)介紹了使用Docker部署RocketMQ DDashboard的全過程,針對Docker新手逐行解析每條命令并提供了解決常見問題的方法,感興趣的朋友跟隨小編一起看看吧

Docker 部署 RocketMQ 5.x 完整教程(含新手踩坑+命令深度解析)

?? 前言:本文基于實戰(zhàn)踩坑經(jīng)驗,整理出 Docker 一鍵部署 RocketMQ + Dashboard 完整流程,全程面向 Docker 新手,每條命令逐行解析,避開 JDK 兼容、網(wǎng)絡(luò)連通、集群注冊等所有常見坑,Windows/Linux 通用,復(fù)制即可上手。

在本地部署 RocketMQ 時,很容易遇到 JDK 版本沖突、Broker 靜默退出、客戶端連接失敗等問題,而 Docker 可以完美隔離環(huán)境,統(tǒng)一依賴,讓部署變得簡單高效,這也是新手避開環(huán)境坑的最優(yōu)方案。

一、前置準(zhǔn)備(必看)

1. 環(huán)境要求

  • Windows:安裝 Docker Desktop(需開啟 Hyper-V,新手直接下一步安裝即可)
  • Linux:安裝 Docker Engine(后續(xù)可補(bǔ)充 Linux 安裝命令,新手先聚焦部署)
  • 端口開放:9876(NameServer)、10911(Broker)、8080(Dashboard),避免防火墻攔截
  • 內(nèi)存建議:≥ 2GB,避免容器因內(nèi)存不足崩潰

2. 核心組件說明(新手必懂)

RocketMQ 核心由 3 個組件組成,缺一不可,Docker 部署時需保證三者互通:

  • NameServer:注冊中心,管理 Broker 地址信息,相當(dāng)于“導(dǎo)航儀”
  • Broker:消息存儲與轉(zhuǎn)發(fā)核心,相當(dāng)于“消息倉庫”,負(fù)責(zé)接收、存儲、轉(zhuǎn)發(fā)消息
  • Dashboard:可視化控制臺,替代繁瑣的 mqadmin 命令行,新手操作更友好

二、Docker 網(wǎng)絡(luò)創(chuàng)建(關(guān)鍵一步,避坑核心)

RocketMQ 的 NameServer、Broker、Dashboard 是三個獨立容器,需要在同一網(wǎng)絡(luò)下才能互通,避免因容器 IP 變動導(dǎo)致連接失敗(比 --link 更穩(wěn)定,新手優(yōu)先用這種方式)。

執(zhí)行命令

docker network create rocketmq

命令深度解析(新手必看)

  • docker network create:Docker 創(chuàng)建自定義橋接網(wǎng)絡(luò)的核心命令,橋接網(wǎng)絡(luò)可實現(xiàn)容器間內(nèi)網(wǎng)互通
  • rocketmq:自定義網(wǎng)絡(luò)名稱,后續(xù)所有 RocketMQ 相關(guān)容器都加入這個網(wǎng)絡(luò),方便管理
  • 作用:讓 NameServer、Broker、Dashboard 處于同一“內(nèi)網(wǎng)”,無需暴露多余端口,避免網(wǎng)絡(luò)不通的坑

三、部署 NameServer(注冊中心,先啟動)

NameServer 是 RocketMQ 的“導(dǎo)航中心”,必須先啟動,否則 Broker 無法注冊,客戶端也無法連接。

1. 啟動命令(復(fù)制直接執(zhí)行)

docker run -d \
  --name rmqnamesrv \
  --network rocketmq \
  --restart always \
  -p 9876:9876 \
  -e "JAVA_OPT_EXT=-Xms256m -Xmx256m" \
  apacherocketmq/rocketmq:5.3.0 \
  sh mqnamesrv

2. 逐行解析(新手吃透每一個參數(shù))

參數(shù)含義新手必懂作用
-d后臺運行容器容器啟動后不占用終端,關(guān)閉終端也不會停止
--name rmqnamesrv給容器命名后續(xù)查看日志、啟動停止容器,直接用這個名字,不用記復(fù)雜的容器ID
--network rocketmq加入自定義的 rocketmq 網(wǎng)絡(luò)和后續(xù)的 Broker、Dashboard 互通,避免網(wǎng)絡(luò)隔離
--restart always開機(jī)自啟Docker 重啟、電腦重啟后,容器自動拉起,不用手動重新啟動
-p 9876:9876端口映射(宿主機(jī)端口:容器端口)宿主機(jī)的 9876 端口映射到容器的 9876 端口,客戶端通過宿主機(jī) IP:9876 訪問 NameServer(9876 是 NameServer 默認(rèn)端口,不可隨意修改)
-e "JAVA_OPT_EXT=-Xms256m -Xmx256m"設(shè)置 JVM 參數(shù)限制容器占用的內(nèi)存(初始 256M,最大 256M),避免容器因內(nèi)存不足 OOM 崩潰,新手不用改這個值
apacherocketmq/rocketmq:5.3.0使用的 RocketMQ 官方鏡像版本和本地客戶端保持一致(本文用 5.3.0,新手直接用這個版本,避免版本沖突)
sh mqnamesrv容器內(nèi)執(zhí)行的啟動命令啟動 NameServer 服務(wù),固定寫法,不用修改

3. 驗證啟動成功(關(guān)鍵一步)

執(zhí)行以下命令,查看 NameServer 日志,確認(rèn)啟動成功:

docker logs --tail 20 rmqnamesrv

出現(xiàn)以下內(nèi)容,說明啟動成功:

The Name Server boot success

四、部署 Broker(核心組件,最易踩坑)

Broker 是消息存儲的核心,也是最容易踩坑的環(huán)節(jié)(之前遇到的 Broker 靜默退出、注冊失敗,都和配置有關(guān)),新手嚴(yán)格按步驟來,不要隨意修改參數(shù)。

1. 準(zhǔn)備自定義配置文件(解決客戶端連接不上的核心)

新建一個名為 broker.conf 的文件(任意目錄,比如桌面),填入以下配置,重點修改 brokerIP1 為你的宿主機(jī) IP

# 集群名稱,默認(rèn) DefaultCluster,和客戶端配置一致即可
brokerClusterName = DefaultCluster
# Broker 名稱,同一集群內(nèi)唯一
brokerName = broker-a
# Broker ID,0 表示主節(jié)點,大于 0 表示從節(jié)點(新手先部署單主節(jié)點)
brokerId = 0
# 消息刪除時間,默認(rèn)凌晨 04 點
deleteWhen = 04
# 消息保留時間,默認(rèn) 48 小時(可修改,比如 72 小時)
fileReservedTime = 48
# Broker 角色,ASYNC_MASTER 異步主節(jié)點(新手推薦,性能更好)
brokerRole = ASYNC_MASTER
# 刷盤策略,ASYNC_FLUSH 異步刷盤(新手推薦,兼顧性能和可靠性)
flushDiskType = ASYNC_FLUSH
# 關(guān)鍵配置:宿主機(jī)真實 IP(Windows/Linux 本機(jī) IP),不能用 127.0.0.1/localhost
# 查看 IP:Windows 用 ipconfig,Linux 用 ifconfig
brokerIP1 = 192.168.1.105(替換成你的宿主機(jī) IP)
# 開啟自動創(chuàng)建 Topic,無需手動用 mqadmin 命令創(chuàng)建(新手必開)
autoCreateTopicEnable = true

2. Broker 啟動命令(復(fù)制修改 IP 即可執(zhí)行)

docker run -d \
  --name rmqbroker \
  --network rocketmq \
  --restart always \
  -p 10911:10911 \
  -p 10909:10909 \
  -v $(pwd)/broker.conf:/home/rocketmq/conf/broker.conf \
  -e "NAMESRV_ADDR=rmqnamesrv:9876" \
  -e "JAVA_OPT_EXT=-Xms512m -Xmx512m" \
  apacherocketmq/rocketmq:5.3.0 \
  sh mqbroker -c /home/rocketmq/conf/broker.conf

3. 核心參數(shù)深度解析(新手重點看)

  • -p 10911:10911:Broker 主通信端口,客戶端發(fā)送/接收消息必須訪問這個端口,不可修改
  • -p 10909:10909:Broker 內(nèi)部通信端口(主從同步、心跳),無需手動訪問,必須映射
  • -v $(pwd)/broker.conf:/home/rocketmq/conf/broker.conf:掛載自定義配置文件
    • $(pwd):表示當(dāng)前命令執(zhí)行的目錄(確保 broker.conf 在這個目錄下)
    • 作用:用自定義的 broker.conf 覆蓋容器內(nèi)默認(rèn)配置,重點是指定 brokerIP1,避免客戶端連接失敗
  • -e "NAMESRV_ADDR=rmqnamesrv:9876":指定 NameServer 地址
    • rmqnamesrv:是 NameServer 容器的名稱(之前命名的),Docker 內(nèi)部可通過容器名訪問,比 IP 更穩(wěn)定
    • 作用:讓 Broker 啟動后自動注冊到 NameServer,避免手動注冊的麻煩
  • -c /home/rocketmq/conf/broker.conf:指定 Broker 加載的配置文件路徑,和掛載的路徑一致,不可修改

4. 驗證啟動成功

執(zhí)行以下命令,查看 Broker 日志:

docker logs --tail 20 rmqbroker

出現(xiàn)以下內(nèi)容,說明 Broker 啟動成功,且已注冊到 NameServer:

The broker boot success. serializeType=JSON
Register broker to name server successfully

五、部署 Dashboard 可視化控制臺(新手福音)

Dashboard 是官方提供的可視化工具,替代繁瑣的 mqadmin 命令行,可直觀查看集群狀態(tài)、Topic、消息等,新手必部署。

1. 啟動命令(復(fù)制直接執(zhí)行)

docker run -d \
  --name rocketmq-dashboard \
  --network rocketmq \
  --restart always \
  -p 8080:8080 \
  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
  apacherocketmq/rocketmq-dashboard:latest

2. 核心參數(shù)解析

  • -p 8080:8080:Dashboard 訪問端口,宿主機(jī) 8080 映射到容器 8080,若 8080 被占用,可修改為 8081:8080(訪問時用 8081 端口)
  • -e "JAVA_OPTS=...":指定 NameServer 地址,和 Broker 配置一致,確保 Dashboard 能連接到 NameServer
  • -Dcom.rocketmq.sendMessageWithVIPChannel=false:關(guān)閉 VIP 通道,RocketMQ 5.x 默認(rèn)關(guān)閉,避免連接失敗

3. 訪問 Dashboard

打開瀏覽器,輸入以下地址,無需登錄,直接訪問:

http://localhost:8080

訪問成功后,可看到集群狀態(tài)、Broker 信息,說明 Dashboard 部署成功。

4. Dashboard 核心功能(新手常用)

  • 集群管理:查看 NameServer、Broker 狀態(tài),是否在線
  • Topic 管理:可視化創(chuàng)建、刪除、修改 Topic,不用記 mqadmin 命令
  • 消息查詢:按 Topic、消息 ID、消息 Key 查詢消息,排查消息丟失問題
  • 消費組管理:查看消費組狀態(tài)、消費堆積情況,重置消費位點
  • 死信隊列:查看消費失敗的消息,一鍵重發(fā),解決消費異常問題

六、服務(wù)狀態(tài)檢查全套命令(新手必備)

部署完成后,用以下命令檢查所有服務(wù)是否正常,避免踩坑:

# 1. 查看所有運行的容器(確認(rèn) NameServer、Broker、Dashboard 都在運行)
docker ps
# 2. 查看 NameServer 日志(排查啟動失敗問題)
docker logs rmqnamesrv
# 3. 查看 Broker 日志(排查注冊失敗、啟動異常問題)
docker logs rmqbroker
# 4. 檢查集群節(jié)點(確認(rèn) Broker 已注冊到 NameServer)
docker exec -it rmqbroker sh mqadmin clusterList -n rmqnamesrv:9876
# 5. 查看端口占用(排查端口沖突問題)
# Windows
netstat -ano | findstr 9876
# Linux
netstat -tuln | grep 9876

七、實戰(zhàn)踩坑總結(jié)(我們親身遇到的問題,新手必看)

結(jié)合之前部署遇到的問題,整理出 5 個最常見的坑,提前避開,節(jié)省時間:

坑 1:Broker 啟動無日志、靜默退出

  • 原因:JDK 版本兼容問題(本地 JDK17 與 RocketMQ 腳本不兼容)、內(nèi)存不足、配置錯誤
  • 解決:用 Docker 封裝環(huán)境,統(tǒng)一 JDK 版本;啟動時指定 JVM 內(nèi)存參數(shù)(-Xms512m -Xmx512m);檢查 broker.conf 配置是否正確

坑 2:客戶端報錯 CODE:206 消費者組不在線

  • 原因:使用了官方默認(rèn)消費組名 please_rename_unique_group_name(這個組是禁用的,無法使用)
  • 解決:自定義消費組名(比如 test-consumer-group);先啟動消費者,再發(fā)送消息;開啟 Broker 自動創(chuàng)建 Topic(autoCreateTopicEnable=true)

坑 3:客戶端連接超時、無法發(fā)送消息

  • 原因:Broker 注冊的是容器內(nèi)網(wǎng) IP,客戶端無法訪問;brokerIP1 配置錯誤(用了 127.0.0.1)
  • 解決:在 broker.conf 中強(qiáng)制指定 brokerIP1 為宿主機(jī)真實 IP;確保容器加入自定義 rocketmq 網(wǎng)絡(luò)

坑 4:Java 客戶端報錯 UnsupportedClassVersionError

  • 原因:JDK8 運行 JDK17 編譯的 Jar 包,版本不兼容
  • 解決:統(tǒng)一 JDK 版本(客戶端用 JDK17);Docker 部署的 RocketMQ 環(huán)境已隔離 JDK,不會出現(xiàn)此問題

坑 5:mqadmin 創(chuàng)建 Topic 報錯“集群不存在”

  • 原因:Broker 未注冊到 NameServer;NameServer 與 Broker 不在同一網(wǎng)絡(luò)
  • 解決:使用自定義 Docker 網(wǎng)絡(luò);啟動 Broker 時指定 NAMESRV_ADDR=rmqnamesrv:9876;檢查 Broker 日志是否注冊成功

八、Java 客戶端連接配置(實戰(zhàn)可用)

部署完成后,用 Java 代碼測試消息收發(fā),核心配置如下(替換宿主機(jī) IP 即可):

1. 生產(chǎn)者代碼(發(fā)送消息)

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
public class ProducerTest {
    public static void main(String[] args) throws Exception {
        // 1. 自定義生產(chǎn)者組名(不要用默認(rèn)組名)
        DefaultMQProducer producer = new DefaultMQProducer("test-producer-group");
        // 2. 設(shè)置 NameServer 地址(宿主機(jī) IP:9876)
        producer.setNamesrvAddr("192.168.1.105:9876");
        // 3. 啟動生產(chǎn)者
        producer.start();
        // 4. 發(fā)送消息(TopicTest 會自動創(chuàng)建,無需手動創(chuàng)建)
        Message message = new Message("TopicTest", "Tag1", "Hello RocketMQ!".getBytes());
        SendResult result = producer.send(message);
        System.out.println("消息發(fā)送成功:" + result);
        // 5. 關(guān)閉生產(chǎn)者
        producer.shutdown();
    }
}

2. 消費者代碼(接收消息)

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;
public class ConsumerTest {
    public static void main(String[] args) throws Exception {
        // 1. 自定義消費者組名(與生產(chǎn)者組名不同)
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test-consumer-group");
        // 2. 設(shè)置 NameServer 地址(和生產(chǎn)者一致)
        consumer.setNamesrvAddr("192.168.1.105:9876");
        // 3. 訂閱 Topic(* 表示訂閱所有 Tag)
        consumer.subscribe("TopicTest", "*");
        // 4. 注冊消息監(jiān)聽(接收消息)
        consumer.registerMessageListener((MessageListenerConcurrently) (list, context) -> {
            for (MessageExt msg : list) {
                System.out.println("收到消息:" + new String(msg.getBody()));
            }
            // 返回消費成功狀態(tài)
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        });
        // 5. 啟動消費者
        consumer.start();
        System.out.println("消費者啟動成功,等待接收消息...");
    }
}

九、容器常用運維命令(新手必備)

后續(xù)啟動、停止、重新部署服務(wù),用以下命令即可,不用重新敲部署命令:

# 1. 停止所有 RocketMQ 相關(guān)容器
docker stop rmqnamesrv rmqbroker rocketmq-dashboard
# 2. 啟動所有 RocketMQ 相關(guān)容器
docker start rmqnamesrv rmqbroker rocketmq-dashboard
# 3. 刪除所有 RocketMQ 相關(guān)容器(重新部署時用)
docker rm -f rmqnamesrv rmqbroker rocketmq-dashboard
# 4. 查看容器詳細(xì)信息(排查網(wǎng)絡(luò)、掛載問題)
docker inspect rmqbroker
# 5. 進(jìn)入 Broker 容器內(nèi)部(查看配置、日志)
docker exec -it rmqbroker /bin/sh

十、總結(jié)

對于新手來說,Docker 部署 RocketMQ 是避開環(huán)境坑、快速上手的最優(yōu)方案,核心要點總結(jié)如下:

  • 先創(chuàng)建自定義 Docker 網(wǎng)絡(luò),確保所有容器互通,避免網(wǎng)絡(luò)問題;
  • Broker 必須掛載自定義配置文件,指定 brokerIP1 為宿主機(jī) IP,否則客戶端無法連接;
  • 所有組件版本保持一致(本文用 5.3.0),避免版本沖突;
  • 用 Dashboard 替代命令行,降低運維成本,新手更容易操作;
  • 遇到問題先看日志,大部分問題都能通過日志定位(docker logs 命令)。

按本文步驟操作,可一次性成功部署 RocketMQ,無需反復(fù)踩坑,直接進(jìn)行消息收發(fā)測試,適合新手快速上手。

到此這篇關(guān)于Docker 部署 RocketMQ 5的完整教程的文章就介紹到這了,更多相關(guān)Docker 部署 RocketMQ內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker出現(xiàn)Cannot connect to the Docker daemon. Is the docker daemon running on this host錯誤解決辦法

    Docker出現(xiàn)Cannot connect to the Docker daemon. Is the docker d

    這篇文章主要介紹了Docker出現(xiàn)Cannot connect to the Docker daemon. Is the docker daemon running on this host錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Linux中使用Docker構(gòu)建Nginx容器的詳細(xì)攻略

    Linux中使用Docker構(gòu)建Nginx容器的詳細(xì)攻略

    Nginx是一款廣泛使用的高性能 Web 服務(wù)器和反向代理服務(wù)器,適用于各種場景,如靜態(tài)文件服務(wù)、負(fù)載均衡和 API 網(wǎng)關(guān)等,在本教程中,我們將詳細(xì)介紹如何在 Docker 中構(gòu)建并運行一個 Nginx 容器,幫助開發(fā)者快速搭建和管理 Nginx 服務(wù),感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Docker數(shù)據(jù)卷和掛載目錄的使用

    Docker數(shù)據(jù)卷和掛載目錄的使用

    docker?在容器中管理數(shù)據(jù)主要有兩種方式,包括數(shù)據(jù)卷和掛載主機(jī)目錄,本文主要介紹了Docker數(shù)據(jù)卷和掛載目錄的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • docker安裝MinIO全過程

    docker安裝MinIO全過程

    Minio是一個高性能的面向?qū)ο蟠鎯Ψ?wù),使用Go語言編寫,支持跨平臺,本文介紹了如何使用Docker安裝Minio,并通過配置用戶名密碼、創(chuàng)建Bucket和上傳圖片進(jìn)行簡單的存儲操作
    2024-12-12
  • 通過容器技術(shù)(docker)部署MySQL讀寫分離

    通過容器技術(shù)(docker)部署MySQL讀寫分離

    Mycat作為開源數(shù)據(jù)庫中間件,在MySQL讀寫分離架構(gòu)中發(fā)揮核心作用,通過智能代理層實現(xiàn)讀寫請求的自動路由、負(fù)載均衡與故障轉(zhuǎn)移,從而提高系統(tǒng)性能和可用性
    2026-01-01
  • 使用 Docker-compose 搭建lnmp的詳細(xì)過程

    使用 Docker-compose 搭建lnmp的詳細(xì)過程

    Docker-Compose項目是Docker官方的開源項目,負(fù)責(zé)實現(xiàn)對Docker容器集群的快速編排,這篇文章主要介紹了使用 Docker-compose 搭建lnmp,需要的朋友可以參考下
    2023-06-06
  • 關(guān)于docker啟動jenkins環(huán)境的問題

    關(guān)于docker啟動jenkins環(huán)境的問題

    這篇文章主要介紹了docker啟動jenkins環(huán)境的問題,文中提到了jenkins基本工作原理及管理員密碼獲取方法,對docker啟動jenkins環(huán)境相關(guān)知識感興趣的朋友一起看看吧
    2022-04-04
  • Docker 安裝及配置鏡像加速的實現(xiàn)

    Docker 安裝及配置鏡像加速的實現(xiàn)

    這篇文章主要介紹了Docker 安裝及配置鏡像加速的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Docker自定義JDK鏡像并拉取至阿里云鏡像倉庫超詳細(xì)攻略

    Docker自定義JDK鏡像并拉取至阿里云鏡像倉庫超詳細(xì)攻略

    Docker倉庫是集中存放鏡像的地方,分為公共倉庫和私有倉庫,這篇文章主要給大家介紹了關(guān)于Docker自定義JDK鏡像并拉取至阿里云鏡像倉庫的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Docker從C盤遷移到D盤的詳細(xì)流程

    Docker從C盤遷移到D盤的詳細(xì)流程

    本文介紹了如何將使用Docker Desktop和WSL2的Windows 10/11系統(tǒng)中的Docker數(shù)據(jù)盤從C盤遷移到D盤的相關(guān)資料,需要的朋友可以參考下
    2026-04-04

最新評論

明水县| 会理县| 娱乐| 汾阳市| 华亭县| 凉城县| 浪卡子县| 扎赉特旗| 宁国市| 田林县| 聂荣县| 廊坊市| 牙克石市| 绥化市| 克什克腾旗| 吉首市| 蕉岭县| 钟山县| 武汉市| 镇江市| 房产| 马尔康县| 祥云县| 淮阳县| 迁西县| 江孜县| 固始县| 台南县| 无棣县| 新竹县| 松阳县| 嫩江县| 苍梧县| 应用必备| 江安县| 沽源县| 兰考县| 巴里| 安岳县| 融水| 平湖市|