修订记录 | 时间 |
---|---|
首次发布 | 2023.07 |
一、RocketMQ
1.1 组成
1.2 使用
怎么保证消息顺序消费?
RocketMQ可以保证局部顺序,同一个订单/用户的消息路由到同一个队列中。
怎么保证消息不被重复消费?(怎么保证消息的幂等性?)
消费端记录已消费过的messageId。
怎么保证消息的可靠性?
RocketMQ(十五) RocketMQ如何保证消息的可靠性?
- 消息发送方:通过不同的重试策略保证了消息的可靠发送。
- 同步发送:阻塞获取发送结果,失败默认重试2次。
- 异步发送:通过回调返回发送结果,业务层面根据结果判断是否要重试。
- 单向发送:发送完成后不返回发送结果,无法保证消息发送的可靠性。
- Broker服务端:通过不同的刷盘机制以及主从复制来保证消息的可靠存储。
- 消息刷盘:将数据从Page Cache刷新到磁盘中。
- 同步刷盘:消息写入Page Cache后开始刷盘,刷盘完成后返回消息写成功的状态。
- 异步刷盘(默认):消息写入Page Cache就返回消息写成功的状态。Page Cache积累到一定量再刷盘,可能在刷盘中间丢失消息。
- 主从复制
- 同步复制:Master和Slave都写成功后才返回写成功状态。如果Master出故障,Slave上有全部的备份数据,容易恢复。
- 异步复制:只要Master写成功就返回写成功状态。如果Master出了故障,有些数据因为没有被写 入Slave,有可能会丢失。
- 消息刷盘:将数据从Page Cache刷新到磁盘中。
- 消息消费方:通过至少消费成功一次以及消费重试机制来保证消息的可靠消费。
- 消费重试机制:不返回COMSUME_SUCCESS就不算消费完成,会按照不同的时间间隔再次消费。如果消费满16次之后还是未能消费成功,则不再重试,会将消息发送到死信队列,从而保证消息存储的可靠性。
- 死信队列:消息最终进入了死信队列,则可以通过RocketMQ提供的相关接口从死信队列获取到相应的消息,保证了消息消费的可靠性。
怎么处理消息积压?
1.3 设计
为什么RocketMQ不使用zookeeper来注册?
5 张图告诉你 RocketMQ 为什么不使用 Zookeeper 做注册中心