一、概述
RocketMQ是阿里巴巴开源的一款分布式消息中间件,用于处理大规模消息传输与存储。它使用Java语言编写,是阿里巴巴内部历经双十一等高并发场景考验的成熟产品。2016年开源后,RocketMQ捐赠给Apache,并成为了Apache的一个顶级项目。RocketMQ支持事务消息、顺序消息、批量消息、定时消息、消息回溯等多种功能,满足各种复杂的业务需求。
二、特点
高性能:RocketMQ具有高吞吐量和低延迟的特性,能够处理亿级消息堆积,适合对消息队列性能有严格要求的业务环境。
高可靠:RocketMQ采用分布式架构,具有集群级别的高可用性。消息生产者发送一条消息到消息服务器,消息服务器会随机选择一个消费者,只要该消费者消费成功即认为消息发送成功。此外,RocketMQ还支持消息的持久化存储,确保数据不丢失。
高实时:RocketMQ支持实时的消息订阅机制,消息能够迅速地被消费者接收并处理。
分布式:RocketMQ的Producer、Consumer和队列都可以分布式部署,使得系统能够处理更大规模的并发请求。
灵活的消息模式:RocketMQ支持拉(pull)和推(push)两种消息模式,以满足不同的业务场景需求。
丰富的发送方式:RocketMQ提供同步发送、异步发送、顺序发送和单向发送等多种发送方式,以满足不同的消息发送需求。
高效的订阅者水平扩展能力:RocketMQ支持多个消费者实例平均消费一个Topic对应的队列集合,从而实现高效的订阅者水平扩展。
较少的依赖:RocketMQ的依赖较少,使得系统的集成和维护更加简单。
RocketMQ主要由以下组件组成:
Producer:负责生产消息,一般由业务系统负责生产。
Consumer:负责消费消息,一般是后台系统负责异步消费。
Broker:消息中转角色,负责存储消息、转发消息。在实际部署过程中,Broker对应一台服务器,每个Broker可以存储多个Topic的消息。
NameServer:负责Broker的注册和发现,使得Producer和Consumer能够找到可用的Broker。
三、安装
1.下载镜像
docker pull rocketmqinc/rocketmq:latest
2.下载成功后查看下载的镜像
docker images
3.创建nameserver数据存储目录
创建nameserver的日志目录logs和数据存放目录store
mkdir -p /usr/local/rocketmq/namesrv/logs /usr/local/rocketmq/namesrv/store
4.启动namesrv容器
docker run -d --restart=always --name rmqnamesrv \
-p 9876:9876 \
-v /usr/local/rocketmq/namesrv/logs:/root/logs \
-v /usr/local/rocketmq/namesrv/store:/root/store \
rocketmqinc/rocketmq:latest sh mqnamesrv
然后使用命令docker ps 查看rmqnamesrv是否启动成功,如下图,显示启动成功了
5.创建broker数据存储路径
mkdir -p /usr/local/rocketmq/broker/logs /usr/local/rocketmq/broker/store /usr/local/rocketmq/broker/conf
进入/usr/local/rocketmq/broker/conf目录,创建并编辑broker.conf文件
cd /usr/local/rocketmq/broker/conf && vi broker.conf
并将如下内容复制到broker.conf中,然后保存退出(修改brokerIP1为宿主机的IP地址,修改namesrvAddr为nameserver的IP地址)
# 所属集群名字
brokerClusterName=DefaultCluster
# broker 名字,不同的配置文件broker 名字具有唯一性
brokerName=broker-1
# 0 表示 Master,> 0 表示 Slave
brokerId=0
# nameServer地址,分号分割
namesrvAddr=192.168.7.46:9876
# 启动IP,填写宿主机ip
brokerIP1=192.168.7.46
# 默认创建的队列数
defaultTopicQueueNums=4
# 是否允许 Broker 自动创建 Topic
autoCreateTopicEnable=true
# 是否允许 Broker 自动创建订阅组
autoCreateSubscriptionGroup=true
# Broker 对外服务的监听端口
listenPort=10911
# 删除文件时间点,默认凌晨2点
deleteWhen=02
# 文件保留时间,默认48小时
fileReservedTime=120
# commitLog 每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
# destroyMapedFileIntervalForcibly=120000
# redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
# storePathRootDir=/usr/local/rocketmq/mydata/store
# commitLog 存储路径
# storePathCommitLog=/usr/local/rocketmq/mydata/store/commitlog
# 消费队列存储
# storePathConsumeQueue=/usr/local/rocketmq/mydata/store/consumequeue
# 消息索引存储路径
# storePathIndex=/usr/local/rocketmq/mydata/store/index
# checkpoint 文件存储路径
# storeCheckpoint=/usr/local/rocketmq/mydata/store/checkpoint
# abort 文件存储路径
# abortFile=/usr/local/rocketmq/mydata/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
6.启动broker容器
docker run -d --restart=always --name rmqbroker01 \
--link rmqnamesrv:namesrv \
-p 10911:10911 -p 10909:10909 \
-v /usr/local/rocketmq/broker/logs:/root/logs \
-v /usr/local/rocketmq/broker/store:/root/store \
-v /usr/local/rocketmq/broker/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
rocketmqinc/rocketmq \
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
docker ps查看nameserver和broker,发现均已成功启动
docker ps
7.安装rocketmq-console可视化界面
docker pull pangliang/rocketmq-console-ng
8.构建rocketmq-console容器并启动
docker run -d --restart=always --name rmqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.7.46:9876 -Dcom.rocketmqsendMessageWithVIPChannel=false" -p 9999:8080 pangliang/rocketmq-console-ng
(Drocketmq.namesrv.addr后面的IP地址改为nameserver IP地址)
9.访问web控制台界面
打开浏览器访问地址 http://你的宿主机IP:9999可进行访问
至此,docker安装rocketMq服务安装完毕!