图解RocketMQ之保姆级部署指南

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

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

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

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

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

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

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

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

Docker 方式

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

拉取 RocketMQ 镜像

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

 

Java

代码解读

复制代码

docker pull apache/rocketmq:5.1.0

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

创建容器共享网络

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

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

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

创建容器共享网络命令:

 

Java

代码解读

复制代码

docker network create rocketmq

启动 NameServer

 

Java

代码解读

复制代码

# 启动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 已成功启动。

启动 Broker+proxy

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

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

 

Java

代码解读

复制代码

# 配置 Broker 的 IP 地址 echo "brokerIP1=192.168.200.47" >broker.conf

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

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

 

Java

代码解读

复制代码

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

 

bash

代码解读

复制代码

# 启动 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"

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

 

Java

代码解读

复制代码

# 启动一个 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 控制台。

 

Java

代码解读

复制代码

# 拉取镜像 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

 

bash

代码解读

复制代码

# 启动容器,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/

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

image.png

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

Docker-compose 方式

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

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

新建响应目录

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

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

 

shell

代码解读

复制代码

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 文件。目录结构如下:

image.png

新建docker-compose.yml

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

 

yaml

代码解读

复制代码

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

一键启动

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

 

yaml

代码解读

复制代码

# 一键启动 docker-compose up -d # 一键停止所有容器 docker-compose stop # 一键删除所有容器 docker-compose rm # 一键查看所有启动的容器 docker-compose ps

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

image.png

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

就可以看到如下界面啦:

image.png

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

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值