RocketMQ Docker 环境
hanpy

使用 docker compose 搭建 RocketMQ 环境

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
rocketmq
├── .env
├── broker
│   ├── Dockerfile
│   ├── broker.conf
│   └── data
│   ├── logs
│   └── store
├── docker-compose.yml
└── namesrv
├── Dockerfile
└── data
├── logs
│   └── rocketmqlogs
│   ├── namesrv.log
│   └── namesrv_default.log
└── store

.env

1
2
3
4
5
6
7
8
# 本机IP
DOCKER_HOST_IP=192.168.31.211

# RocketMQ版本
ROCKETMQ_VERSION=4.4.0

# RocketMQ端口
ROCKET_SERVER_PORT=9876

namesrv/Dockerfile

1
2
3
4
5
ARG ROCKETMQ_VERSION

FROM rocketmqinc/rocketmq:${ROCKETMQ_VERSION}

CMD ["sh", "mqnamesrv"]

broker/Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
ARG ROCKETMQ_VERSION
FROM rocketmqinc/rocketmq:${ROCKETMQ_VERSION}

ARG LOCAL_HOST_IP
RUN echo ${LOCAL_HOST_IP}

## 修改配置内容
USER root
# 覆盖配置文件
COPY broker.conf /opt/rocketmq-${ROCKETMQ_VERSION}/conf/broker.conf

# 动态修改IP
RUN sed -i "s/dockerHost/${LOCAL_HOST_IP}/g" /opt/rocketmq-${ROCKETMQ_VERSION}/conf/broker.conf

broker/broker.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# 所属集群名字
brokerClusterName=DefaultCluster

# broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
# 在 broker-b.properties 使用: broker-b
brokerName=broker-a

# 0 表示 Master,大于 0 表示 Slave
brokerId=0

# nameServer地址,分号分割
# namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

# 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
# 解决方式1 加上一句 producer.setVipChannelEnabled(false);,
# 解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
# “dockerHost”只是一个占位的,在定义Dockerfile的时候是替换成本机IP的
brokerIP1=dockerHost

# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
autoCreateTopicEnable=true

# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

# Broker 对外服务的监听端口
listenPort=10911

# 删除文件时间点,默认凌晨4点
deleteWhen=04

# 文件保留时间,默认48小时
fileReservedTime=120

# commitLog 每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

# ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

# destroyMapedFileIntervalForcibly=120000
# redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
# storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
# commitLog 存储路径
# storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
# 消费队列存储
# storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
# 消息索引存储路径
# storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
# checkpoint 文件存储路径
# storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
# abort 文件存储路径
# abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
# 限制的消息大小
maxMessageSize=65536

# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000

# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER

# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

# 发消息线程池数量
# sendMessageThreadPoolNums=128
# 拉消息线程池数量
# pullMessageThreadPoolNums=128

docker-compse.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
version: "3"

networks:
rocket_n:
driver: bridge

services:
rocketmq:
build:
context: ./namesrv
args:
- ROCKETMQ_VERSION=${ROCKETMQ_VERSION}
volumes:
- ./namesrv/data/logs:/opt/logs
- ./namesrv/data/store:/opt/store
ports:
- "${ROCKET_SERVER_PORT}:9876"
environment:
JAVA_OPT_EXT: "-Duser.home=/opt -Xms512M -Xmx512M -Xmn128m"
MAX_POSSIBLE_HEAP: 100000000
networks:
- rocket_n
rocketmq-broker:
build:
context: ./broker
args:
- LOCAL_HOST_IP=${DOCKER_HOST_IP}
- ROCKETMQ_VERSION=${ROCKETMQ_VERSION}
volumes:
- ./broker/data/logs:/opt/logs
- ./broker/data/store:/opt/store
ports:
- 10909:10909
- 10911:10911
- 10912:10912
command: sh mqbroker -n rocketmq:9876 -c ../conf/broker.conf
environment:
- JAVA_HOME=/usr/lib/jvm/jre
depends_on:
- rocketmq
networks:
- rocket_n
rocketmq-console:
image: styletang/rocketmq-console-ng
ports:
- 8087:8080
environment:
- JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rocketmq:9876
- Dcom.rocketmq.sendMessageWithVIPChannel=false
depends_on:
- rocketmq
networks:
- rocket_n
1
$ docker compose up -d

访问设置的本地IP:8087

image