likes
comments
collection
share

图解RocketMQ之保姆级部署指南

作者站长头像
站长
· 阅读数 54

大家好,我是苍何。

但凡是亲自部署过 RocketMQ 的小伙伴估计都跟我有一样的感受,岂是一个坑字了得。

RocketMQ 的迭代不算快,但出乎意料的是不同的版本之间部署的方式又不大一样,你去上网查吧,大部分教程也没标注使用的是哪个版本。

作为技术博主,我对教程是有着强烈洁癖的,我认为一切不标注时效的教程都不是好教程。

正如你所看到的,我正写的保姆级部署教程是基于的 5.1.0 这个版本,来自未来的读者,我希望你在实践之前能和我的版本保持一致。

图解RocketMQ之保姆级部署指南

当然如果你是来自未来 2 年的读者,大概率请你不要参照我的教程,但其思想是可以长存的,不会随着时间的流逝而变成没有用的屁。

因大部分时候,我们学习环境都会搭建在本地环境,所以这其实更多是一篇单机版的部署教程,至于集群版本,我会再单独写一篇,毕竟更复杂嘛。

因 RocketMQ 天生的分布式组件,苍何建议大家都用 Docker 或者 Docker-Compose 部署,出问题了重建搞个镜像还很快。

由于我的电脑是 M 1 芯片,有一些个别的命令如果是 windows 需要调整下。

Docker 方式

通过 Docker 的方式简单高效,可以快速部署一个单节点单副本的 RocketMQ 服务。

拉取 RocketMQ 镜像

我拉取的是 dockerhub 上 RocketMQ 的镜像版本 5.1.0,请尽量保持版本和我的一致,否则会有意想不到的事情发生。

docker pull apache/rocketmq:5.1.0

拉取成功后,可以看下本地镜像列表是否已有啦:

图解RocketMQ之保姆级部署指南

创建容器共享网络

为什么要创建 docker 共享网络?

  • 容器间通信:创建一个 Docker 网络可以确保同一个网络中的容器可以通过容器名称进行通信,而不需要知道对方的 IP 地址。这对于需要相互通信的服务非常重要,比如 RocketMQ 的多个组件(如 NameServer 和 Broker)。
  • 隔离性和安全性:Docker 网络提供了一个隔离的网络环境,不同网络中的容器彼此隔离。这增加了安全性,防止外部或其他不相关的容器访问敏感服务。
  • 简化配置:使用 Docker 网络,配置变得更加简单。容器可以通过名称互相访问,无需担心容器重启后 IP 地址发生变化。

对于像 RocketMQ 这样的分布式系统,它包含多个服务(NameServer、Broker、Producer、Consumer 等),这些服务需要互相通信。创建一个共享网络使得这些服务可以轻松发现和通信。

创建容器共享网络命令:

docker network create rocketmq

启动 NameServer

# 启动NameServer(windows)

docker run -d --name pmnamesrv -p 9876:9876 --net rocketmq apache/rocketmq:5.1.0 sh mqnamesrv

# MAC,需要指定平台

docker run --platform linux/amd64 -d --name pmnamesrv -p 9876:9876 --net rocketmq apache/rocketmq:5.1.0 sh mqnamesrv

# 验证NameServer是否启动成功

docker logs -f pmnamesrv

我们可以看到 'The Name Server boot success..', 表示NameServer 已成功启动。

图解RocketMQ之保姆级部署指南

启动 Broker+proxy

NameServer成功启动后,我们启动Broker 和 proxy。5.0+版本以上需要启动代理组件。

先配置 Broker 的 IP 地址(需要自己 查 IP 地址):


# 配置 Broker 的 IP 地址

echo "brokerIP1=192.168.200.47" >broker.conf

这样会在你的终端所在目录下生成 broker.conf 配置文件,里面只有一串内网络配置的内容。(注意这里 127.0.0.1 要修改为共享网络 pmbroker )

图解RocketMQ之保姆级部署指南

当然了,也可以添加一些默认配置进去:


brokerClusterName = DefaultCluster

brokerName = broker

brokerId = 0

deleteWhen = 04

fileReservedTime = 48

brokerRole = ASYNC_MASTER

flushDiskType = ASYNC_FLUSH

# 你的本机ip, 注意不要写localhost,127.0.0.1等,因为这是放到docker容器中的,我们需要指向mac本机

brokerIP1 = 192.168.200.47

# 禁用 tsl

tlsTestModeEnable = false 

复制 broker.conf 所在路径并填入启动程序中:

启动 Broker 和 Proxy:

如果不是 MAC ,去掉--platform linux/amd64

# 启动 Broker 和 Proxy

docker run --platform linux/amd64 -d \

--name pmbroker \

--network rocketmq \

-p 10912:10912 -p 10911:10911 -p 10909:10909 \

-p 8080:8080 -p 8081:8081 \

-e "NAMESRV_ADDR=pmnamesrv:9876" \

-v /Users/canghe/tools/rocketmq/broker.conf:/home/rocketmq/rocketmq-5.1.0/conf/broker.conf \

-v /Users/canghe/tools/rocketmq/data:/home/rocketmq/store \

apache/rocketmq:5.1.0 sh mqbroker --enable-proxy \

-c /home/rocketmq/rocketmq-5.1.0/conf/broker.conf

  

# 验证 Broker 是否启动成功

docker exec -it pmbroker bash -c "tail -n 10 /home/rocketmq/logs/rocketmqlogs/proxy.log"

下面是启动具体的解释,需要根据自身情况做简单的修改哦:

# 启动一个 Docker 容器,并在后台运行

docker run -d \

# 容器名称为 rmqbroker

--name rmqbroker \

# 使用名为 rocketmq 的 Docker 网络

--network rocketmq \

# 映射容器的端口到主机的端口

# 10912:10912 - RocketMQ 内部通信端口

# 10911:10911 - RocketMQ 内部通信端口

# 10909:10909 - RocketMQ 内部通信端口

# 8080:8080 - RocketMQ 控制台端口

# 8081:8081 - RocketMQ 控制台端口

-p 10912:10912 -p 10911:10911 -p 10909:10909 \

-p 8080:8080 -p 8081:8081 \

# 设置环境变量 NAMESRV_ADDR,指定 NameServer 的地址

-e "NAMESRV_ADDR=rmqnamesrv:9876" \

# 将主机上的 broker.conf 文件挂载到容器内的指定路径

-v ./broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf \

# 数据持久化,防止重启容器数据丢失

-v /Users/canghe/tools/rocketmq/data:/home/rocketmq/store \

# 使用 RocketMQ 5.2.0 镜像

apache/rocketmq:5.2.0 \

# 在容器内执行 mqbroker 命令,并启用代理功能

sh mqbroker --enable-proxy \

# 指定 Broker 的配置文件路径

-c /home/rocketmq/rocketmq-5.2.0/conf/broker.conf

搭建可视化控制台

前面 NameServer 和 Broker 搭建完成之后,就可以用来收发消息了,但是为了更加直观,可以搭建对应的服务控制台。在页面上直观看数据。

这里我直接选用 docker 方式安装 dashboard 控制台。

# 拉取镜像

docker pull apacherocketmq/rocketmq-dashboard:latest

  

# 启动容器

docker run -d --name rocketmq-dashboard --net rocketmq -e "JAVA_OPTS=-Drocketmq.namesrv.addr=pmnamesrv:9876" -p 8081:8080 -t apacherocketmq/rocketmq-dashboard:latest

  

# 启动容器,mac芯片

docker run --platform linux/amd64 -d --name rocketmq-dashboard --net rocketmq -e "JAVA_OPTS=-Drocketmq.namesrv.addr=pmnamesrv:9876" -p 8082:8080 -t apacherocketmq/rocketmq-dashboard:latest

# 启动容器,mac芯片
docker run --platform linux/amd64 -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" -p 8082:8080 -t apacherocketmq/rocketmq-dashboard:latest

谷歌浏览器访问控制台:http://localhost:8082/

提示:大概要等几分钟控制台才有页面出现!

图解RocketMQ之保姆级部署指南

至此,Rocketmq 的安装启动就完成啦,比较麻烦,很吃版本,所以咱们一定要亲自动手操作才行哦。

Docker-compose 方式

妈呀,Docker-compose 又是个啥子?别害怕,如果你有仔细看过我们的教程的话应该不会陌生,这玩意无非就是能够编排容器,也就是说像我们上一步的 docker 启动多个容器,还是有顺序的,用 Docker-compose 就再适合不过了。

来吧,教程奉上,就三步哦,贼简单:

新建响应目录

电脑找个空的地方新建个文件夹,就叫 rocketmq 吧

然后新建 broker 目录,里面建 broker.conf,用来存放 broker 挂载配置,配置如下:


brokerClusterName = DefaultCluster

brokerName = broker

brokerId = 0

deleteWhen = 04

fileReservedTime = 48

brokerRole = ASYNC_MASTER

flushDiskType = ASYNC_FLUSH

# 你的本机ip, 注意不要写localhost,127.0.0.1等,因为这是放到docker容器中的,我们需要指向mac本机

brokerIP1 = 192.168.200.47

# 禁用 tsl

tlsTestModeEnable = false


之后在rocketmq 新建 data 文件夹,用来存放持久化数据,防止容器重启数据丢失。

新建 docker-compose 文件夹,里面新建文件 docker-compose.yml 文件。目录结构如下:

图解RocketMQ之保姆级部署指南

新建docker-compose.yml

这个就是 docker-compose 最重要的启动文件了,复制以下配置,具体目录修改为自己对应的目录即可,够简单吧,哈哈,这个地方其实苍何遇到 了不少坑,主要是 rocketmq 的官网太辣鸡了,社区也文档也不够多,需要自己琢磨的。

version: '3.8'

services:

namesrv:

image: apache/rocketmq:5.1.0

container_name: rocketmq-pmnamesrv

command: sh mqnamesrv

networks:

- rocketmq

ports:

- "9876:9876"

  

broker:

image: apache/rocketmq:5.1.0

container_name: rocketmq-pmbroker

command: sh mqbroker -n namesrv:9876 -c /home/rocketmq/rocketmq-5.1.0/conf/broker.conf

ports:

- "10911:10911"

- "10909:10909"

- "10912:10912"

depends_on:

- namesrv

networks:

- rocketmq

volumes:

- /Users/canghe/tools/rocketmq/broker/broker.conf:/home/rocketmq/rocketmq-5.1.0/conf/broker.conf

- /Users/canghe/tools/rocketmq/data:/home/rocketmq/store

  

proxy:

image: apache/rocketmq:5.1.0

container_name: rocketmq-pmproxy

networks:

- rocketmq

depends_on:

- broker

- namesrv

ports:

- 8080:8080

- 8081:8081

restart: on-failure

environment:

- NAMESRV_ADDR=rocketmq-pmnamesrv:9876

command: sh mqproxy

  
  

dashboard:

image: apacherocketmq/rocketmq-dashboard:latest

container_name: rocketmq-dashboard

environment:

- JAVA_OPTS=-Drocketmq.namesrv.addr=rocketmq-pmnamesrv:9876

ports:

- "8082:8080"

networks:

- rocketmq

depends_on:

- namesrv

- broker

- proxy

  

networks:

rocketmq:

driver: bridge

一键启动

以下几个命令就可以手到擒来了:


# 一键启动

docker-compose up -d

  

# 一键停止所有容器

docker-compose stop

  

# 一键删除所有容器

docker-compose rm

  

# 一键查看所有启动的容器

docker-compose ps

如果一切都没问题,你可以看到如下信息:

图解RocketMQ之保姆级部署指南

这个时候你只需要小手打开下浏览器,输入;http://localhost:8082/

就可以看到如下界面啦:

图解RocketMQ之保姆级部署指南

好啦,有关 RocketMQ 的本地保姆级部署教程就到这里啦,有疑惑和问题欢迎大家留言讨论。

我是苍何,这是图解 RocketMQ 教程的第 12 篇,我们下篇见~

转载自:https://juejin.cn/post/7400732103154221082
评论
请登录