为什么选择RocketMQ
优势
- 使用Java语言,可从源码角度理解逻辑、排查问题,必要时可进行二次开发
- 特性丰富,比如顺序消息、事务消息、消息过滤、定时消息,可以覆盖更多复杂场景
- 大厂背书,作为阿里的开源项目,经过阿里核心业务的考验。通过字节内部大量业务也都使用RocketMQ
原理类课程学习方法
方法
- 循序渐进,一步一个脚印
- 业务场景学习
- 借助图片理解
RocketMQ核心概念
Broker
概念
它是处理Message的实体,它接收Producer传输的Message,并持久化到服务器,同时负责处理Consumer的消费请求。
特性
- 支持集群,避免单点故障场景。
- Message分布式分散存储在各个Broker节点上。
Topic
概念
一类或者一大类Message的集合,是业务的抽象概念
MessageQueue
概念
用来根据Topic存储Message,数据存储的抽象概念
特性
- 将Topic中的Message分散存储在不同的Broker中,防止单个大的Topic存储在一个Broker上,出现数据倾斜的场景
- Topic数据存储在不同的Broker中,能保证数据的部分可用
NameServer
概念
储存RocketMQ集群的元数据,比如集群有哪些活跃的Broker、集群里有哪些Topic、这些Topic的MessageQueue分别在哪些Broker上存储
特性
- Broker、Producer、Consumer会和NameServer有数据交互,Broker会通过心跳的方式持续的更新元数据
- 可集群部署
RocketMQ有哪些特性
简介
订阅与发布、顺序消费、消息过滤、消息消费重试、消息可靠、至少一次消费模型、死信度列、事务消息、延迟队列、回溯消息、流量控制、消息重投
顺序消费
分类
- 分区有序,当一个Topic中有多个MessageQueue时,虽然可以对多个MessageQueue并行消费,但是在一个MessageQueue中是有序的
- 全局有序,一个Topic只分配一个MessageQueue,无法并行消费,但能保证全局有序
消息过滤
实现
生产者和消费者通过传递tag参数实现消息过滤
事务消息
概念
将发送消息的本地事务和投递消息操作组合成一个事务
执行过程
成功
- 本地事务运行、并且成功(比如往数据库写订单数据成功)
- 投递消息到消息队列成功
失败
- 本地事务失败(比如往数据库写订单数据失败)
- 投递消息操作取消
延迟队列
概念
可设定消息的延时时间,延迟一段时间之后,Consumer才能收到数据
特性
只提供18个时间选项供用户选择,分别是1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
死信队列
概念
存储无法被正常消费的消息,无法被正常消费的消息表示达到最大重试次数的消息(默认是16次)
特性
- 死信队列会带上%DLQ%前缀,且后面跟上消费组的名称
- Message默认3天后会消失
消息发送方式
方式
- SYNC:Producer发送Message后,需要Broker回复之后,才会发送下一条消息
- ASYNC:Producer发送Message后,不需要等待Broker回复,通过回调的方式等待Broker的响应
- ONEWAY:Producer发送Message后,不需要等待Broker回复,也不需要通过回调处理Broker的响应。性能很好,日志收集场景可以考虑ONEWAY方式
服务间通讯用的什么协议
RocketMQ服务间通信使用的是自定义的通信协议,称为RocketMQ协议。
RocketMQ协议是一种基于TCP/IP的二进制协议,用于在RocketMQ的生产者、消费者和消息队列服务器之间进行通信。