一、相关配置目录及文件映射
1.1 映射目录
1.1.1 name server
主要是给docker映射外部的日志及存储目录,即logs
、store
. 这里有两个nameserver组成集群,分别是namesrv-a
和namesrv-b
。
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/namesrv-a/logs
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/namesrv-b/logs
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/namesrv-a/store
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/namesrv-b/store
1.1.2 broker
同name server,只是多了配置broker的文件夹。两个broker均为master。
# broker-a
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-a/logs
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-a/store
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-a/conf
# broker-b
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-b/logs
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-b/store
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-b/conf
1.2 映射配置文件
这里主要为broker的配置文件。
1.2.1 broker-a配置文件
# broker-a
# # 所属集群名字
brokerClusterName=rocketmq-cluster
# broker 名字,注意此处不同的配置文件填写的不一样,
# - 如果在 broker-a.properties 使用: broker-a,
# - 在 broker-b.properties 使用: broker-b
brokerName=broker-a
brokerId=0
# 启动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 (建议直接设置)
#如果是正式环境 这里一定要填写内网地址(安全)
#如果是用于测试或者本地这里建议要填外网地址,因为你的本地代码是无法连接到阿里云内网,只能连接外网。
brokerIP1=192.168.50.205
# 删除文件时间点,默认凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=48
# 注册到NameServer的地址,多个用分号分割
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.50.205:9876;192.168.50.205:9877
# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
autoCreateTopicEnable=true
#Broker 对外服务的监听端口,
listenPort=10911
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# 发消息线程池数量
# sendMessageThreadPoolNums=128
# 拉消息线程池数量
# pullMessageThreadPoolNums=128
Tips:
更多配置信息,可参看 【RocketMQ学习】13-源码之消息过滤与重试1.5节 内容
1.2.2 broker-b配置文件
brokerClusterName = rocketmq-cluster
brokerName = broker-b
brokerId = 0
brokerIP1 = 192.168.50.205
deleteWhen = 04
fileReservedTime = 48
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.50.205:9876;192.168.50.205:9877
autoCreateTopicEnable=true
#Broker 对外服务的监听端口,
listenPort = 10909
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
1.3 docker-compose文件
这里利用docker-compose
进行服务编排,一次性按序启动所有需要的服务,包括nameserver
、broker
、console
。
我们可以简单把docker-compose.yml
理解成一个类似Shell的脚本,这个脚本定义了运行多容器应用程序的信息。
version: '3.5'
services:
rmqnamesrv-a:
image: foxiswho/rocketmq:4.7.0
container_name: rmqnamesrv-a
ports:
- 9876:9876
volumes:
- /Users/zyxelva/docker-data/rocketMQ/data/namesrv-a/logs:/opt/logs
- /Users/zyxelva/docker-data/rocketMQ/data/namesrv-a/store:/opt/store
command: sh mqnamesrv
networks:
rmq:
aliases:
- rmqnamesrv-a
rmqnamesrv-b:
image: foxiswho/rocketmq:4.7.0
container_name: rmqnamesrv-b
ports:
- 9877:9877
volumes:
- /Users/zyxelva/docker-data/rocketMQ/data/namesrv-b/logs:/opt/logs
- /Users/zyxelva/docker-data/rocketMQ/data/namesrv-b/store:/opt/store
command: sh mqnamesrv
networks:
rmq:
aliases:
- rmqnamesrv-b
rmqbroker-a:
image: foxiswho/rocketmq:4.7.0
container_name: rmqbroker-a
ports:
- 10911:10911
volumes:
- /Users/zyxelva/docker-data/rocketMQ/data/broker-a/logs:/opt/logs
- /Users/zyxelva/docker-data/rocketMQ/data/broker-a/store:/opt/store
- /Users/zyxelva/docker-data/rocketMQ/data/broker-a/conf/broker-a.conf:/opt/rocketmq-4.7.0/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-a:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
command: sh mqbroker -c /opt/rocketmq-4.7.0/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv-a:rmqnamesrv-a
- rmqnamesrv-b:rmqnamesrv-b
networks:
rmq:
aliases:
- rmqbroker-a
rmqbroker-b:
image: foxiswho/rocketmq:4.7.0
container_name: rmqbroker-b
ports:
- 10909:10909
volumes:
- /Users/zyxelva/docker-data/rocketMQ/data/broker-b/logs:/opt/logs
- /Users/zyxelva/docker-data/rocketMQ/data/broker-b/store:/opt/store
- /Users/zyxelva/docker-data/rocketMQ/data/broker-b/conf/broker-b.conf:/opt/rocketmq-4.7.0/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-b:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
command: sh mqbroker -c /opt/rocketmq-4.7.0/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv-a:rmqnamesrv-a
- rmqnamesrv-b:rmqnamesrv-b
networks:
rmq:
aliases:
- rmqbroker-b
rmqconsole:
image: styletang/rocketmq-console-ng
container_name: rmqconsole
ports:
- 9001:8080
environment:
JAVA_OPTS: -Drocketmq.config.namesrvAddr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Drocketmq.config.isVIPChannel=false
networks:
rmq:
aliases:
- rmqconsole
networks:
rmq:
name: rmq
driver: bridge
上述文件中,我们可以得出以下有用的信息:
- rocketmq镜像,我们采用的是
foxiswho/rocketmq:4.7.0
; - 总共有5个镜像需要拉取:
rmqnamesrv-a
、rmqnamesrv-b
、rmqbroker-a
、rmqbroker-b
、rmqconsole
; rocketmq-console-ng
是一个第三方的可视化工具,可以通过网页查看rocketmq组织信息,状态信息,消息等;- broker相关配置文件已经通过上面的配置文件进行了映射,后续需要更改,直接更改这些文件再重启broker即可。
二、环境部署
1. 建议使用64位操作系统,Linux / Unix / Mac;
2. 64位JDK 1.8+;
3. Maven 3.2.x;
4. Git;
5. 4g +免费磁盘用于Broker服务器
本机操作系统为MacOS Catalina 10.15
,已安装docker desktop
,因而已自带docker-compose
,如果需要通过docker-compose启动,还需安装它。具体步骤可参考 官方说明 。
三、执行
假设上述步骤已然全部完成,执行下面命令
docker-compose -f docker-compose.yml up -d
看到如下结果,证明你已经全部安装成功了!
[zyxelva@192 11:40:32 ~/docker-data/rocketMQ]$ docker-compose -f docker-compose.yml up -d
[+] Running 5/5
⠿ Container rmqnamesrv-b Running 0.0s
⠿ Container rmqnamesrv-a Running 0.0s
⠿ Container rmqbroker-b Running 0.0s
⠿ Container rmqbroker-a Running 0.0s
⠿ Container rmqconsole Started 0.8s
通过docker-desktop查看启动情况。
通过访问 http://localhost:9001
可以看到可视化界面下的rocketmq相关监控信息。