单节点部署
目录结构
请按照如下结构新建好目录和文件
/rmq
├── docker-compose.yml
├── dashboard/
├── logs/
├── store/
└── conf/ # 配置文件目录
├── broker.conf # broker配置文件
└─- rmq-proxy.json # rmq-proxy 配置文件
为docker添加logs和store两个目录的读写权限
chmod 777 -R ./logs
chmod 777 -R ./store
如果未添加目录权限,启动的时候,broker会报错:
java.lang.NullPointerException
at org.apache.rocketmq.broker.schedule.ScheduleMessageService.configFilePath(ScheduleMessageService.java:273)
docker-compose.yml
执行之前,先执行命令
docker network create dev_net创建网络
services:
namesrv:
image: apache/rocketmq:5.3.2
container_name: rmqnamesrv
restart: always
ports:
- 9876:9876
networks:
- dev_net
command: sh mqnamesrv
# Local 模式下 Proxy 和 Broker 是同进程部署
broker:
image: apache/rocketmq:5.3.2
container_name: rmqbroker
restart: always
ports:
- 10909:10909
- 10911:10911
- 10912:10912
- 8080:8080
- 8081:8081
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间到容器
- ./conf/broker.conf:/home/rocketmq/conf/broker.conf
- ./store:/home/rocketmq/store
- ./logs:/home/rocketmq/logs
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
- JAVA_OPT_EXT=-Xms1g -Xmx1g -Xmn512m
depends_on:
- namesrv
networks:
- dev_net
command: sh mqbroker --enable-proxy -c /home/rocketmq/conf/broker.conf
rmqdashboard:
image: apacherocketmq/rocketmq-dashboard:2.0.1
container_name: rmqdashboard
restart: on-failure
networks:
- dev_net
depends_on:
- namesrv
volumes: # 如果想保存仪表盘的数据,可以把这个目录也挂载出来
- ./dashboard:/tmp/rocketmq-console/data
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间到容器
ports:
- 18090:8080
environment:
- JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876
networks:
dev_net:
external: true
broker.conf
注意,配置中的
brokerIP1要改为自己的宿主机IP
#集群名称
brokerClusterName=rocketmq-cluster
#broker名称,注意rocketmq的cluster模式下,每个Master配置一个Slave,所以每对主从的brokerName要相同
brokerName=broker1
#brokerId master用0 slave用其他
brokerId=0
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SYNC_MASTER
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# namesrv地址,多个地址用;分隔
namesrvAddr=rmqnamesrv:9876
# broker IP地址,单节点模式部署,由于broker和proxy部署在同一个容器里,这里需要写宿主机的IP地址
# 如果这里不写,注册到NameServer的地址就是容器的ip地址,开发阶段,代码里是连接不上的
brokerIP1=192.168.1.126
#是否能够自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
# defaultTopicQueueNums=4
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
# autoCreateSubscriptionGroup=true
#commitLog每个文件的大小默认1G
# mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
# mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
# diskMaxUsedSpaceRatio=88
#存储路径(可以自己修改)
# storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径(可以自己修改)
# storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径(可以自己修改)
# storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径(可以自己修改)
# storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
# storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
# abortFile=/usr/local/rocketmq/store/abort
rmq-proxy.json
{
"rocketMQClusterName": "rocketmq-cluster",
"namesrvAddr": "rmqnamesrv:9876"
}
集群部署
目录结构
1、请按照如下结构新建好目录和文件
/rmq
├── docker-compose.yml
├── dashboard
├── logs/ # 日志目录
├── m1/ # master_1 的日志目录
├── s1/ # slave_1 的日志目录
├── m2/ # master_2 的日志目录
└── s2/ # slave_2 的日志目录
├── store/ # 消息存储目录
├── m1/ # master_1 的存储目录
├── s1/ # slave_1 的存储目录
├── m2/ # master_2 的存储目录
└── s2/ # slave_2 的存储目录
└── conf/ # 配置文件目录
├── broker-m1.conf # master_1 配置文件
├── broker-s1.conf # slave_1 配置文件
├── broker-m2.conf # master_2 配置文件
├── broker-s2.conf # slave_2 配置文件
└── rmq-proxy.json # rmq-proxy 配置文件
2、为docker添加logs和store两个目录的读写权限
chmod 777 -R ./logs
chmod 777 -R ./store
如果未添加目录权限,启动的时候,broker会报错:
java.lang.NullPointerException
at org.apache.rocketmq.broker.schedule.ScheduleMessageService.configFilePath(ScheduleMessageService.java:273)
挂载文件说明
首次挂载时,如果宿主机目录为空,需要从容器内复制初始文件,不然启动会失败
先创建临时容器并复制文件
# 1. 启动临时容器(不挂载)
docker run -d --name temp-container your-image
# 2. 创建本地目录
mkdir -p /path/to/host/directory
# 3. 复制容器内文件到宿主机
docker cp temp-container:/path/in/container /path/to/host/directory
# 4. 停止并删除临时容器
docker stop temp-container && docker rm temp-container
# 5. 正式运行容器并挂载
docker run -v /path/to/host/directory:/path/in/container your-image
docker-compose.yml
执行之前,先执行命令
docker network create dev_net创建网络
services:
rmqnamesrv: # Nameserver
image: apache/rocketmq:5.3.2
container_name: rmqnamesrv
restart: always
ports:
- 9876:9876
command: sh mqnamesrv
networks:
- dev_net
mqbroker-m1: # Master 1
image: apache/rocketmq:5.3.2
container_name: mqbroker-m1
restart: always
ports:
- 10911:10911
- 10909:10909
- 10912:10912
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间到容器
- ./conf/broker-m1.conf:/home/rocketmq/conf/broker.conf
- ./logs/m1:/home/rocketmq/logs
- ./store/m1:/home/rocketmq/store
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
- JAVA_OPT_EXT=-Xms1g -Xmx1g -Xmn512m
command: sh mqbroker -c /home/rocketmq/conf/broker.conf
depends_on:
- rmqnamesrv
networks:
- dev_net
mqbroker-s1: # Slave 1
image: apache/rocketmq:5.3.2
container_name: mqbroker-s1
restart: always
ports:
- 11911:11911
- 11909:11909
- 11912:11912
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间到容器
- ./conf/broker-s1.conf:/home/rocketmq/conf/broker.conf
- ./logs/s1:/home/rocketmq/logs
- ./store/s1:/home/rocketmq/store
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
- JAVA_OPT_EXT=-Xms1g -Xmx1g -Xmn512m
command: sh mqbroker -c /home/rocketmq/conf/broker.conf
depends_on:
- rmqnamesrv
networks:
- dev_net
mqbroker-m2: # Master 2
image: apache/rocketmq:5.3.2
container_name: mqbroker-m2
restart: always
ports:
- 20911:10911
- 20909:10909
- 20912:10912
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间到容器
- ./conf/broker-m2.conf:/home/rocketmq/conf/broker.conf
- ./logs/m2:/home/rocketmq/logs
- ./store/m2:/home/rocketmq/store
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
- JAVA_OPT_EXT=-Xms1g -Xmx1g -Xmn512m
command: sh mqbroker -c /home/rocketmq/conf/broker.conf
depends_on:
- rmqnamesrv
networks:
- dev_net
mqbroker-s2: # Slave 2
image: apache/rocketmq:5.3.2
container_name: mqbroker-s2
restart: always
ports:
- 21911:11911
- 21909:11909
- 21912:11912
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间到容器
- ./conf/broker-s2.conf:/home/rocketmq/conf/broker.conf
- ./logs/s2:/home/rocketmq/logs
- ./store/s2:/home/rocketmq/store
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
- JAVA_OPT_EXT=-Xms1g -Xmx1g -Xmn512m
command: sh mqbroker -c /home/rocketmq/conf/broker.conf
depends_on:
- rmqnamesrv
networks:
- dev_net
proxy:
image: apache/rocketmq:5.3.2
container_name: rmqproxy
restart: on-failure
ports:
- 8080:8080
- 8081:8081
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间到容器
- ./conf/rmq-proxy.json:/home/rocketmq/proxy/conf/rmq-proxy.json
command: sh mqproxy -pc /home/rocketmq/proxy/conf/rmq-proxy.json -pm cluster
depends_on:
- rmqnamesrv
- mqbroker-m1
- mqbroker-s1
- mqbroker-m2
- mqbroker-s2
networks:
- dev_net
rmqdashboard:
image: apacherocketmq/rocketmq-dashboard:2.0.1
container_name: rmqdashboard
restart: on-failure
depends_on:
- rmqnamesrv
volumes: # 如果想保存仪表盘的数据,可以把这个目录也挂载出来
- ./dashboard:/tmp/rocketmq-console/data
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间到容器
ports:
- 18090:8080
environment:
- JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false
networks:
- dev_net
networks:
dev_net:
external: true
broker-m1.conf
#集群名称
brokerClusterName=rocketmq-cluster
#broker名称,注意rocketmq的cluster模式下,每个Master配置一个Slave,所以每对主从的brokerName要相同
brokerName=broker_m1
#brokerId master用0 slave用其他
brokerId=0
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SYNC_MASTER
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#namesrv地址,多个地址用;分隔
namesrvAddr=rmqnamesrv:9876
#是否能够自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
# defaultTopicQueueNums=4
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
# autoCreateSubscriptionGroup=true
#commitLog每个文件的大小默认1G
# mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
# mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
# diskMaxUsedSpaceRatio=88
#存储路径(可以自己修改)
# storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径(可以自己修改)
# storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径(可以自己修改)
# storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径(可以自己修改)
# storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
# storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
# abortFile=/usr/local/rocketmq/store/abort
broker-s1.conf
#集群名称
brokerClusterName=rocketmq-cluster
#broker名称,注意rocketmq的cluster模式下,每个Master配置一个Slave,所以每对主从的brokerName要相同
brokerName=broker_m1
#brokerId master用0 slave用其他
brokerId=1
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SLAVE
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#namesrv地址,多个地址用;分隔
namesrvAddr=rmqnamesrv:9876
#是否能够自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
# defaultTopicQueueNums=4
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
# autoCreateSubscriptionGroup=true
#commitLog每个文件的大小默认1G
# mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
# mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
# diskMaxUsedSpaceRatio=88
#存储路径(可以自己修改)
# storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径(可以自己修改)
# storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径(可以自己修改)
# storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径(可以自己修改)
# storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
# storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
# abortFile=/usr/local/rocketmq/store/abort
broker-m2.conf
#集群名称
brokerClusterName=rocketmq-cluster
#broker名称,注意rocketmq的cluster模式下,每个Master配置一个Slave,所以每对主从的brokerName要相同
brokerName=broker_m2
#brokerId master用0 slave用其他
brokerId=0
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SYNC_MASTER
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#namesrv地址,多个地址用;分隔
namesrvAddr=rmqnamesrv:9876
#是否能够自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
# defaultTopicQueueNums=4
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
# autoCreateSubscriptionGroup=true
#commitLog每个文件的大小默认1G
# mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
# mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
# diskMaxUsedSpaceRatio=88
#存储路径(可以自己修改)
# storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径(可以自己修改)
# storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径(可以自己修改)
# storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径(可以自己修改)
# storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
# storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
# abortFile=/usr/local/rocketmq/store/abort
broker-s2.conf
#集群名称
brokerClusterName=rocketmq-cluster
#broker名称,注意rocketmq的cluster模式下,每个Master配置一个Slave,所以每对主从的brokerName要相同
brokerName=broker_m2
#brokerId master用0 slave用其他
brokerId=1
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SLAVE
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#namesrv地址,多个地址用;分隔
namesrvAddr=rmqnamesrv:9876
#是否能够自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
# defaultTopicQueueNums=4
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
# autoCreateSubscriptionGroup=true
#commitLog每个文件的大小默认1G
# mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
# mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
# diskMaxUsedSpaceRatio=88
#存储路径(可以自己修改)
# storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径(可以自己修改)
# storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径(可以自己修改)
# storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径(可以自己修改)
# storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
# storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
# abortFile=/usr/local/rocketmq/store/abort
rmq-proxy.json
{
"rocketMQClusterName": "rocketmq-cluster",
"namesrvAddr": "rmqnamesrv:9876"
}