Docker Compose部署RocketMQ
RocketMQ官网,虽然官网里面的文档自带有Docker,Docker Compose部署MQ的教材,但是实际上是不够用的,缺少了一些配置,我查看官方文档,再使用AI,实际动手部署后,能够成功部署上MQ,然后发个文章,做个记录,也希望对有需要的朋友提供帮助。
1.安装JDK
MQ的运行是需要JDK1.8+,所以我们首先安装JDK,这里我们安装OpenJDK,而不是Oracle JDK,一般情况下,Open JDK已经能满足所有的需求,而且免费使用,安装速度很快。我这里使用的是AlmaLinux的操作系统。
# CentOS 8 / Rocky / AlmaLinux / RHEL 8+
sudo dnf install java-1.8.0-openjdk-devel -y
验证
javac
java -version
如果出现对应的版本号那就是安装成功了。
2.拉取MQ的镜像
docker pull apache/rocketmq:5.3.2
3.拉取控制台Dashboard镜像
拉取控制的镜像是为了可观测和可视化操作。
#最新版本的官方的镜像
$ docker pull apacherocketmq/rocketmq-dashboard:latest
#旧版本镜像
docker pull styletang/rocketmq-console-ng:latest
这里给出两个选择的原因是因为,我在实际部署过程中发现,最新版本的官方的镜像会存在一些问题,和最新版本5.x的MQ存在兼容性问题,MQ和控制台都成功运行之后,控制台是无法访问的,就算是在服务器内部使用curl命令去访问也是报错的,所以改换了社区维护较好、稳定性更高的 styletang/rocketmq-console-ng 这个镜像。
4.新建MQ工作目录和配置文件
我们使用Docker Compose部署MQ是需要创建对应的文件夹和docker-compose.yml文件的。
我这里就在根目录创建文件夹了。
#切换到根目录
cd /
sudo mkdir rocketmq
sudo touch docker-compose.yml
sudo chmod +x docker-compose.yml
工作目录和compose.yml文件建好之后,我们继续在这个目录下新建docker要挂载数据的文件件以及broker.conf配置文件,建立这个配置文件是方便配置MQ的一些参数,例如分配的JVM内存等配置。
cd rocketmq
sudo touch broker-a.conf broker-b.conf
sudo mkdir data/broker-a/logs data/broker-a/store
sudo mkdir data/broker-b/logs data/broker-b/store
这里解释一下为什么要创建这几个文件和文件夹。我们查看官方文档会发现MQ有单机和集群的部署模式,我这里这么做就是实现单机模式下的多组节点(集群)单副本模式,这个模式部署的都是Master节点,但是实际上这样部署也只是伪集群,生产环境下有能力的还是推荐真正的集群模式。这里的broker-a和broker-b就是部署的两个节点。
5.编写docker-compose.yml和broker.conf
docker-compose.yml
services:
namesrv:
image: apache/rocketmq:5.3.2
container_name: rmqnamesrv
ports:
- "9876:9876"
networks:
- rocketmq
command: sh mqnamesrv
restart: unless-stopped
# ==================== Broker A ====================
broker-a:
image: apache/rocketmq:5.3.2
container_name: rmqbroker-a
ports:
- "10911:10911"
- "10909:10909"
- "10912:10912"
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
volumes:
- ./data/broker-a/logs:/home/rocketmq/logs
- ./data/broker-a/store:/home/rocketmq/store
- ./broker-a.conf:/home/rocketmq/rocketmq-5.3.2/conf/broker.conf:ro
depends_on:
- namesrv
networks:
- rocketmq
command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.2/conf/broker.conf
restart: unless-stopped
# deploy:
# resources:
# limits:
# memory: 1200M
# ==================== Broker B ====================
broker-b:
image: apache/rocketmq:5.3.2
container_name: rmqbroker-b
ports:
- "10921:10911"
- "10919:10909"
- "10922:10912"
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
volumes:
- ./data/broker-b/logs:/home/rocketmq/logs
- ./data/broker-b/store:/home/rocketmq/store
- ./broker-b.conf:/home/rocketmq/rocketmq-5.3.2/conf/broker.conf:ro
depends_on:
- namesrv
networks:
- rocketmq
command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.2/conf/broker.conf
restart: unless-stopped
# deploy:
# resources:
# limits:
# memory: 1200M
proxy:
image: apache/rocketmq:5.3.2
container_name: rmqproxy
ports:
- "8080:8080"
- "8081:8081"
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
depends_on:
- broker-a
- broker-b
networks:
- rocketmq
command: sh mqproxy
restart: unless-stopped
dashboard:
# image: apacherocketmq/rocketmq-dashboard:latest
image: styletang/rocketmq-console-ng:latest
container_name: rmqdashboard
ports:
- "8082:8080"
environment:
- JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876
-Dcom.rocketmq.sendMessageWithVIPChannel=false
-Drocketmq.config.enableDashBoard=true
depends_on:
- namesrv
- broker-a
- broker-b
networks:
- rocketmq
# network_mode: host
restart: unless-stopped
networks:
rocketmq:
driver: bridge
broker-a.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
namesrvAddr = rmqnamesrv:9876
listenPort = 10911
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
autoCreateTopicEnable = true
autoCreateSubscriptionGroup = true
brokerJVMOpts = -Xms768m -Xmx768m -Xmn384m -XX:MaxDirectMemorySize=1g
maxMessageSize = 4194304
broker-b.conf配置文件就不贴了,都是一样的配置,只需要改一下brokerName这个配置项就行了。然后里面的 autoCreateTopicEnable 和 autoCreateSubscriptionGroup这个两个配置项说一下。
前者是配置为自动创建主题,也就是我们项目里面,如果你没有手动去创建主题的话,当代码执行发送消息的时候,那个对应的主题会自动创建,后者是自动创建订阅组,不过这两个在生产环境下都不推荐使用。
6.启动MQ和控制台
# 后台运行
docker compose up -d
运行上面的这会命令,界面上会出对应的构建过程信息,等待1-2分钟即可构建启动成功。
查看运行状态
docker ps
出现如下图所示的界面,就代表MQ启动成功了
最后再访问 ip:8082就能进入MQ的控制台了。

至此基本上就结束了。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)