RocketMQ学习笔记三(黑马)大神级

课程来源:6.RocketMQ安装_哔哩哔哩_bilibili (时长:19.5h)

讲解版本:4.5版本(我是以4.8版本实践的)

目录

第一部分 核心功能 

第1章 RocketMQ的下载、安装、启动和测试(Linux环境)

启动:

测试:

第2章 RocketMQ集群搭建

2.1 集群特点

2.2 集群模式

2.3 双主双从集群搭建

2.3.1 总体架构

2.3.2 集群工作流程★★★

2.3.3 搭建集群的准备工作★★

2.3.4 修改broker配置文件★★★

1)master1

2)slave2

3)master2

4)slave1

2.3.5 服务启动

1)启动NameServe集群

2)启动Broker集群

2.3.6 通过jps命令检查启动状态

2.4 mqadmin管理工具

2.5 集群监控平台搭建(rocketmq-dashboard)

2.5.1 在Windows中测试

2.5.2 在Linux集群中测试

第3章 消息发送&接收样例

3.1 基本样例

3.1.1 消息发送基本样式Producer

1)发送同步消息

2)发送异步消息

3)单向发送消息

3.1.2 消息接收基本样式Consumer

1)负载均衡模式

2)广播模式

3.2 顺序消息

3.2.1 构建虚拟订单

3.2.2 顺序消息生产

3.2.3 顺序消息消费

3.3 延时消息

3.4 批量消息

3.5 过滤消息

1. Tag过滤

2. SQL过滤

3.6 事务消息★★★

3.6.1 流程分析

1)事务消息发送及提交

2)事务补偿

3)事务消息状态

3.6.2 发送事务消息

1) 事务性生产者代码

2) 事务性消费者代码

3) 测试

3.6.3 使用限制


第一部分 核心功能 

第1章 RocketMQ的下载、安装、启动和测试(Linux环境)

启动:

第一步,修改bin/runserver.sh文件和bin/runbroker.sh文件中配置大小;

第二步,启动NameServer;

### 启动namesrv
$ nohup sh bin/mqnamesrv &
 
### 验证namesrv是否启动成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...

第三步,启动Broker;

### 先启动broker
$ nohup sh bin/mqbroker -n localhost:9876 &

### 验证broker是否启动成功, 比如, broker的ip是192.168.1.2 然后名字是broker-a
$ tail -f ~/logs/rocketmqlogs/broker.log 
The broker[broker-a,192.169.1.2:10911] boot success...

说明:也可以直接去家目录中查看启动日志

NameServer的启动日志所在位置:~/logs/rocketmqlogs/namesrv.log

Broker的启动日志所在位置:~/logs/rocketmqlogs/broker.log 

测试:

发送消息

# 1.设置环境变量
export NAMESRV_ADDR=localhost:9876
# 2.使用安装包的Demo发送消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

接收消息

# 1.设置环境变量
export NAMESRV_ADDR=localhost:9876
# 2.接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

关闭RocketMQ

# 1.关闭NameServer
sh bin/mqshutdown namesrv
# 2.关闭Broker
sh bin/mqshutdown broker

第2章 RocketMQ集群搭建

2.1 集群特点

  • NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。

  • Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer。

  • Producer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。

  • Consumer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。

2.2 集群模式

1)单Master模式

2)多Master模式

3)多Master多Slave模式(异步)

每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:

  • 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;

  • 缺点:Master宕机,磁盘损坏情况下会丢失少量消息。

4)多Master多Slave模式(同步)

每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,即只有主备都写成功,才向应用返回成功,这种模式的优缺点如下:

  • 优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;

  • 缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。

2.3 双主双从集群搭建

2.3.1 总体架构

消息高可用采用2m-2s(同步双写)方式

2.3.2 集群工作流程★★★

  1. 启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制中心。

  2. Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息。注册成功后,NameServer集群中就有Topic跟Broker的映射关系。

  3. 收发消息前,先创建Topic,创建Topic时需要指定该Topic要存储在哪些Broker上,也可以在发送消息时自动创建Topic。

  4. Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取当前发送的Topic存在哪些Broker上,轮询从队列列表中选择一个队列,然后与队列所在的Broker建立长连接从而向Broker发消息。

  5. Consumer跟Producer类似,跟其中一台NameServer建立长连接,获取当前订阅Topic存在哪些Broker上,然后直接跟Broker建立连接通道,开始消费消息。

2.3.3 搭建集群的准备工作★★

说明:以下1-5步骤,两台机器上都需要执行。 

1. 准备两台Linux环境的机器

序号 IP 修改hostname 角色 架构模式
1 192.168.6.105 centos105 nameserver、brokerserver Master1、Slave2
2 192.168.6.106 centos106 nameserver、brokerserver Master2、Slave1

当然,可以4台机器哦。

2. 在host文件添加信息

vim /etc/hosts

配置如下:

# nameserver
192.168.6.105 rocketmq-nameserver1
192.168.6.106 rocketmq-nameserver2
# broker
192.168.6.105 rocketmq-master1
192.168.6.105 rocketmq-slave2
192.168.6.106 rocketmq-master2
192.168.6.106 rocketmq-slave1

配置完成后, 重启网卡

systemctl restart network

3. 防火墙配置

宿主机需要远程访问虚拟机的rocketmq服务和web服务,需要开放相关的端口号,简单粗暴的方式是直接关闭防火墙。

4. 环境变量配置(非必须)

vim /etc/profile.d/my_env.sh

(my_env.sh 这个文件是我自己创建的,用于配置各种环境变量) 

输入:wq! 保存并退出, 并使得配置立刻生效:

source /etc/profile.d/my_env.sh

这一步不是必须的。配置的目的是为了在任何位置都可以执行RocketMQ相关命令。

5. 创建消息存储路径

mkdir /opt/software/rocketmq/store
mkdir /opt/software/rocketmq/store/commitlog
mkdir /opt/software/rocketmq/store/consumequeue
mkdir /opt/software/rocketmq/store/index
mkdir /opt/software/rocketmq/store2
mkdir /opt/software/rocketmq/store2/commitlog
mkdir /opt/software/rocketmq/store2/consumequeue
mkdir /opt/software/rocketmq/store2/index

 视频和课件中都没有创建store2这个目录,这是个大坑!!!因为同一主机上启动多个broker时,store路径要不同,例如store1,store2...(这是看评论区知道的,因为我在进行下面2.3.5章节Broker启动时遇到了卡点:每个主机只能启动一个Broker,显然不符合预期)

2.3.4 修改broker配置文件★★★

1)master1

服务器:192.168.6.105

vim /opt/software/rocketmq/conf/2m-2s-sync/broker-a.properties

修改配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
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=/opt/software/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/opt/software/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/software/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/opt/software/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/software/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/opt/software/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
2)slave2

服务器:192.168.6.105

vim /opt/software/rocketmq/conf/2m-2s-sync/broker-b-s.properties

修改配置如下:(我在slave2这里存储路径配的是store2,因为不能配相同的路径)

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/software/rocketmq/store2
#commitLog 存储路径
storePathCommitLog=/opt/software/rocketmq/store2/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/software/rocketmq/store2/consumequeue
#消息索引存储路径
storePathIndex=/opt/software/rocketmq/store2/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/software/rocketmq/store2/checkpoint
#abort 文件存储路径
abortFile=/opt/software/rocketmq/store2/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
3)master2

服务器:192.168.6.106

# 是2m-2s-sync目录,不是2m-2s-async
vim /opt/software/rocketmq/conf/2m-2s-sync/broker-b.properties

修改配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
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=/opt/software/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/opt/software/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/software/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/opt/software/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/software/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/opt/software/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
4)slave1

服务器:192.168.6.106

vim /opt/software/rocketmq/conf/2m-2s-sync/broker-a-s.properties

修改配置如下:(我在slave1这里存储路径配的是store2,因为不能配相同的路径)

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/software/rocketmq/store2
#commitLog 存储路径
storePathCommitLog=/opt/software/rocketmq/store2/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/opt/software/rocketmq/store2/consumequeue
#消息索引存储路径
storePathIndex=/opt/software/rocketmq/store2/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/software/rocketmq/store2/checkpoint
#abort 文件存储路径
abortFile=/opt/software/rocketmq/store2/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

2.3.5 服务启动

启动前,先检查脚本启动文件runbroker.sh和runserver.sh的配置是否已经改小。

1)启动NameServe集群

分别在192.168.6.105和192.168.6.106启动NameServer。如下图是在105机器上的启动:

[root@centos106 rocketmq]# nohup sh bin/mqnamesrv &

jps

[root@centos106 rocketmq]# tail ~/logs/rocketmqlogs/namesrv.log

2)启动Broker集群

注意:先启动master1和master2后,再启动slave1和slave2!!!

在192.168.6.105上启动master1和

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值