使用 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
|
访问设置的本地IP:8087