一、简介
操作系统:Linux CentOS 7.3 64位
docker版本:19.03.8
RocketMQ版本:4.3.2
二、实践
1、拉取镜像
docker pull rocketmqinc/rocketmq:4.3.2
2、运行容器
我们先搭建namesrv(Name Server)服务。
它充当路由消息的提供者,生产者或消费者可以通过namesrv查找各主题对应的Broker IP列表。
多个namesrv实例组成集群,但相互独立,没有信息交换。
支持Broker的动态注册与发现。
创建挂载目录。
mkdir -p /usr/local/docker/rocketmq/data/namesrv/logs /usr/local/docker/rocketmq/data/namesrv/store
运行容器。
docker run --name rmqnamesrv \
--restart=always \
-p 9876:9876 \
-v /usr/local/docker/rocketmq/data/namesrv/logs:/root/logs \
-v /usr/local/docker/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
-d rocketmqinc/rocketmq:4.3.2 \
sh mqnamesrv
-e "MAX_POSSIBLE_HEAP=100000000" ==》 指定namesrv服务的最大堆内存
接着我们搭建broker服务。
Broker Server在RocketMQ系统中负责接收从生产者发送来的消息并存储,同时为消费者的拉取请求做准备,也存储消息相关的元数据,包括消费者组、消费进度偏移、主题和队列信息等。
broker启动后需要完成一次将自己注册至namesrv的操作,随后每隔30s时间定时向namesrv上报Topic路由信息。
我们同样先创建挂载目录。
mkdir -p /usr/local/docker/rocketmq/data/broker/logs /usr/local/docker/rocketmq/data/broker/store /usr/local/docker/rocketmq/conf
接着创建配置文件。
vi /usr/local/docker/rocketmq/conf/broker.conf
配置文件内容为:
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = SYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = SYNC_FLUSH
# 设置broker节点所在服务器的ip地址
brokerIP1 = 192.168.121.132
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95
最后运行容器。
docker run --name rmqbroker \
--restart=always \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v /usr/local/docker/rocketmq/data/broker/logs:/root/logs \
-v /usr/local/docker/rocketmq/data/broker/store:/root/store \
-v /usr/local/docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.3.2/conf/broker.conf \
-e "NAMESRV_ADDR=192.168.121.132:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
-d rocketmqinc/rocketmq:4.3.2 \
sh mqbroker -c /opt/rocketmq-4.3.2/conf/broker.conf
–link rmqnamesrv:namesrv ==》 和rmqnamesrv容器通信
-e "NAMESRV_ADDR=192.168.121.132:9876" ==》 指定namesrv的地址
-e "MAX_POSSIBLE_HEAP=200000000" ==》 指定broker服务的最大堆内存
3.搭建控制台rockermq-console服务
拉取镜像。
docker pull pangliang/rocketmq-console-ng
运行容器。
docker run --name rmqadmin \
--restart=always \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.121.132:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 9999:8080 \
-d pangliang/rocketmq-console-ng
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.121.132:9876 ==》指定namesrv地址
-Dcom.rocketmq.sendMessageWithVIPChannel=false” ==》不使用vip通道发送消息
访问。
http://192.168.121.132:9999/