课程来源: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 集群工作流程★★★
-
启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制中心。
-
Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息。注册成功后,NameServer集群中就有Topic跟Broker的映射关系。
-
收发消息前,先创建Topic,创建Topic时需要指定该Topic要存储在哪些Broker上,也可以在发送消息时自动创建Topic。
-
Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取当前发送的Topic存在哪些Broker上,轮询从队列列表中选择一个队列,然后与队列所在的Broker建立长连接从而向Broker发消息。
-
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
配置完成后, 重启网卡