|
|
|
|
# RocketMQ
|
|
|
|
|
|
|
|
|
|
## 1. RocketMQ 基础
|
|
|
|
|
|
|
|
|
|
- 官方QuickStart: https://github.com/apache/rocketmq/tree/master/docs/cn
|
|
|
|
|
- 官方文档: https://rocketmq.apache.org/docs/
|
|
|
|
|
- 最新版本 4.9.4 【截止2022-7-20】
|
|
|
|
|
- 学习版本 4.3.0 【截止2022-7-20】
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 1.1 整体介绍
|
|
|
|
|
- RocketMQ是一款分布式、队列模型的消息中间件
|
|
|
|
|
- 特性:
|
|
|
|
|
- 支持分布式事物
|
|
|
|
|
- 支持集群模型、负载均衡、水平扩展能力
|
|
|
|
|
- 亿级别的消息堆积能力
|
|
|
|
|
- 采用零拷贝的原理、顺序写盘、随机读
|
|
|
|
|
- 丰富的API封装
|
|
|
|
|
- 代码优秀,底层通信框架采用Netty NIO框架
|
|
|
|
|
- NameServer代替Zookeeper
|
|
|
|
|
- 集群无单点,可扩展,任意一点高可用,水平可扩展
|
|
|
|
|
- 消息失败重试机制,消息可查询
|
|
|
|
|
- 开源社区活跃、成熟度(经过双十一考验)
|
|
|
|
|
|
|
|
|
|
### 1.2 概念模型
|
|
|
|
|
- Producer: 消息生产者,负责生产消息,一般由业务系统负责产生消息
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
- Consumer: 消息消费者,负责消费消息,一般是后台系统负责异步消费
|
|
|
|
|
- Push Consumer: Consumer的一种, 需要向Consumer对象注册监听
|
|
|
|
|
- Pull Consumer: Consumer的一种, 需要主动请求Broker拉取消息
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
- Producer Group: 生产者集合, 一般用于发送一类消息
|
|
|
|
|
- Consumer Group: 消费者集合, 一般用于接收一类消息进行消费
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
- Broker: MQ消息服务(中转角色, 用于消息存储与生产消费转发)
|
|
|
|
|
- Message: TODO
|
|
|
|
|
|
|
|
|
|
### 1.3 源码工程讲解
|
|
|
|
|
- 编译完成的文件在 rocket-distribution/target/ 下
|
|
|
|
|
- RocketMQ的源码结构
|
|
|
|
|
- rocketmq-broker: 主要的业务逻辑, 消息收发, 主从同步, pagecache
|
|
|
|
|
- rocketmq-client: 客户端接口, 比如生产者和消费者
|
|
|
|
|
- rocketmq-example: 示例, 比如生产者和消费者
|
|
|
|
|
- rocketmq-common: 公用数据结构等等
|
|
|
|
|
- rocketmq-distribution: 编译模块, 编译输出等
|
|
|
|
|
- rocketmq-filter: 进行Broker过滤的不感兴趣的消息传输,减小带宽压力
|
|
|
|
|
- rocketmq-logappender, rocketmq-logging 日志相关
|
|
|
|
|
- rocketmq-namesrv Namesrv服务, 用于服务协调
|
|
|
|
|
- rocketmq-openmessaging 对外提供服务
|
|
|
|
|
- rocketmq-remoting 远程调用接口, 封装Netty底层通信
|
|
|
|
|
- rocketmq-util 提供一些公用的工具方法, 比如解析命令行参数
|
|
|
|
|
- rocketmq-store 消息存储
|
|
|
|
|
- rocketmq-test
|
|
|
|
|
- rocketmq-tools 管理工具, 比如有名的mqadmin工具
|
|
|
|
|
|
|
|
|
|
### 1.4 环境搭建
|
|
|
|
|
- 参考 RocketMQ使用手册.pdf
|
|
|
|
|
- ps: 内存大小至少也要1GB
|
|
|
|
|
- ps: 先启动NameSrv 再启动Broker
|
|
|
|
|
- ps: 测试使用1个配置文件即可
|
|
|
|
|
|
|
|
|
|
### 1.5 RocketMQ 控制台使用
|
|
|
|
|
- RocketMQ 扩展组件: https://github.com/apache/rocketmq-externals
|
|
|
|
|
- 可以集成控制台,修改控制台即可
|
|
|
|
|
- 集成SpringBoot也在这里
|
|
|
|
|
|
|
|
|
|
## 2. RocketMQ 基本入门
|
|
|
|
|
|
|
|
|
|
### 2.1 生产者的使用及使用控制台查消息
|
|
|
|
|
1. 创建生产者对象 DefaultMQProducer (必须要对生产者组的名称进行配置)
|
|
|
|
|
2. 设置 NamesrvAddr
|
|
|
|
|
3. 设置一些需要配置的参数
|
|
|
|
|
4. 启动生产者服务
|
|
|
|
|
5. 创建消息并发送
|
|
|
|
|
|
|
|
|
|
### 2.2 消费者的使用及Broker重试机制
|
|
|
|
|
1. 创建消费者对象 DefaultMQPushConsumer
|
|
|
|
|
2. 设置NamesrvAddr及其消费位置ConsumerFromWhere
|
|
|
|
|
3. 进行订阅主题 subscribe
|
|
|
|
|
4. 注册监听并消费 registerMessageListener
|
|
|
|
|
|
|
|
|
|
### 2.3 RocketMQ - 四种集群环境构建详解
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 3. RocketMQ 消费者核心研究
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 4. RocketMQ 核心原理研究
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 5. 双主双从部署
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 6. 购物车、订单与支付场景抗压实战 -> 可以移步到
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 7. RocketMQ分布式事务消息
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 8. RocketMQ顺序消费与微服务解耦
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 9. 数据过滤与性能提升
|
|
|
|
|
|
|
|
|
|
|