10 張圖 | 一文帶你用 Mac M1 跑 RocketMQ
我正在參加「掘金·啟航計劃」
這是悟空的第 166 篇原創文章
你好,我是悟空。
本文主要內容如下:
目錄
前言
最近在倒騰RocketMQ
訊息佇列,首先就得把 RocketMQ 跑起來對吧,我們一般都是 Windows 或者 Linux 機器上,按照官方教程一下子就跑起來了,另外用 Intel 晶片的 Mac 也能輕鬆跑起來。
但是我在 Mac M1
上的機器上跑的時候,就遇到了各種問題,折騰了一天,最後終於把 RocketMQ 在 Mac M1 上用Docker
跑起來了,這裡總結下心路歷程。
雖然演示環境是用 Mac M1系統,但其實 Linux 系統也適用~
關於用原始碼方式跑 RocketMQ 的方式下文也有介紹。
一、用原始碼跑 RocketMQ
最開始我用 Docker 跑,會報錯,後來我就用原始碼跑,可以跑起來,能夠傳送和消費訊息。
原始碼地址:https://github.com/apache/rocketmq
我用的版本是 4.9.2。
詳細步驟請檢視悟空之前寫的一篇文章:
18 張圖 | 一文帶你搭建 RocketMQ 原始碼除錯環境
二、用 Docker 跑 RocketMQ
總共啟動了三個容器,用到的映象分別為
- nameserver 映象:rocketmqinc/rocketmq
- broker 映象:dyrnq/rocketmq:4.8.0
- 控制檯映象:apacherocketmq/rocketmq-dashboard:latest
三個容器啟動成功
2.1 拉取 rocketmq 映象
docker pull rocketmqinc/rocketmq
2.2 啟動 nameserver 命令
映象:rocketmqinc/rocketmq
docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv rocketmqinc/rocketmq sh mqnamesrv
2.3 啟動 broker 命令
映象:dyrnq/rocketmq:4.8.0
docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbrokerv2 --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" dyrnq/rocketmq:4.8.0 sh mqbroker -c ../conf/broker.conf
進入容器
docker exec -it b6b /bin/bash
進入到 broker 容器
修改 broker.conf 檔案,提示未安裝 vim 工具,則需要安裝下 vim
vim ../conf/broker.conf
apt-get update
apt-get install vim
vim ../conf/broker.conf
然後將 這行命令拷貝到 broker.conf 檔案中。192.168.10.197 為自己的本機 IP
brokerIP1=192.168.10.197
不知道自己 IP 的地址的,可以通過這個命令獲取 mac 機器的本機 IP,如下所示:
ifconfig | grep "inet"
最後 broker.conf 配置如下:
broker.conf 配置
三、啟動控制檯 rocketmq-dashboard
原來的控制檯是 rocketmq-console-ng,但是發現 Github 上已經移除了。官方提示如下:
官方提示移除了 rocketmq-console-ng
上面公告的表示之前的rocket-console已經不在這個倉庫了,已經建立了一個獨立的倉庫並命名為RocketMQ Dashboard。倉庫路徑:https://github.com/apache/rocketmq-dashboard
我們直接執行下面的命令:
docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.16.8.62:9876 -Drocketmq.config.isVIPChannel=false" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest
啟動 dashboard 容器
注意:這裡的 IP 地址為本機 IP
isVIPChannel=false,這裡必須這樣設定,不然開啟控制檯後,無法獲取資料。
容器啟動成功後訪問 http://localhost:8080/
四、測試傳送訊息
往 test_topic 傳送一條訊息
選擇往哪個佇列傳送訊息
在訊息主題中輸入 悟空聊架構,www.passjava.cn,點選確定按鈕傳送訊息。
傳送的訊息內容
傳送結果如下:
傳送結果
看下 Message 選單欄,選擇 test_top 主題,可以看到一條訊息:
訊息列表
訊息內容如下,和傳送的訊息一致。
接收到的訊息
五、問題彙總
broker 無法連到 NameServer
需要到容器裡面修改 broker.conf 檔案,加上
brokerIP1=192.168.10.197
並且 docker 啟動 broker 時需要增加命令引數-c ../conf/broker.conf
原因
這裡的 ip 地址需要指定為外網地址。因為 rockerMQ broker 預設會選擇內網地址。
只有當引數行中有-c
引數時才會使用配置檔案的引數。這裡卡了很長時間。
原始碼如下:
``` if (commandLine.hasOption('c')) { String file = commandLine.getOptionValue('c'); if (file != null) { configFile = file; InputStream in = new BufferedInputStream(new FileInputStream(file)); properties = new Properties(); properties.load(in);
properties2SystemEnv(properties); MixAll.properties2Object(properties, brokerConfig); MixAll.properties2Object(properties, nettyServerConfig); MixAll.properties2Object(properties, nettyClientConfig); MixAll.properties2Object(properties, messageStoreConfig);
BrokerPathConfigHelper.setBrokerConfigPath(file); in.close(); } } ```
啟動 broker 報錯
[email protected] ~ docker restart b6b
Error response from daemon: Cannot restart container b6b: Cannot link to a non running container: /rmqnamesrv AS /rmqbrokerv2/namesrv
報錯提示
原因
這個問題其實就是 name server 沒啟動成功。
關於我
8 年網際網路開發經驗,擅長微服務、分散式、架構設計。目前在一家大型上市公司從事基礎架構和效能優化工作。
InfoQ 簽約作者、藍橋簽約作者、阿里雲專家博主、51CTO 紅人。
我的所有文章都彙總到這裡了 www.passjava.cn
- 三國鼎立:ChatGPT、百度文心一言、微軟 New Bing
- 10 張圖 | 一文帶你用 Mac M1 跑 RocketMQ
- 10 張圖 | 一文帶你用 Mac M1 跑 RocketMQ
- 被一位讀者趕超,手摸手 Docker 部署 ELK Stack
- 我的師父把 「JWT 令牌」玩到了極致
- 「架構選型」5 種 API 閘道器技術選型
- 「查缺補漏」 Kafka 核心知識梳理
- 6000 字 | 16 圖 | 深入理解 Spring Cloud Gateway 的原理
- 暑假打工 2 個月,讓我明白了 Keepalived 高可用的三種路由方案
- 演算法:平均分配問題
- Nacos配置中心互動模型是 push 還是 pull ?(原理 原始碼分析)
- 一個月後,我們又從 MySQL 雙主切換成了主-從!
- 從 1.5 開始搭建一個微服務框架——鏈路追蹤 traceId
- 7000 字 | 20 圖 | 一文帶你搭建一套 ELK Stack 日誌平臺
- 深入理解 OpenFeign 遠端呼叫的架構原理
- 一次 MySQL 誤操作導致的事故,高可用都不頂不住!
- 唐太宗把微服務的“心跳機制”玩到了極致!
- 唐太宗把微服務的“心跳機制”玩到了極致!
- 一次 MySQL 誤操作導致的事故,「高可用」都頂不住了!
- 紙上讀來終覺淺