如何保证线上 MQ 消息不丢失
2023年2月24日小于 1 分钟MQ
消息发送方式
- 同步发送
生产者向 MQ 发送消息,会阻塞线程,必须拿到 MQ 返回的结果后,整个过程才算结束
- 异步发送
先构建一个发送的任务,然后将任务丢到线程池中,最终结果是通过回调函数来得知
- OneWay 发送(单向)
只负责发送请求,不需要关注结果
适用于 log 之类的消息,丢几条也没有关系
如果要保证消息不丢失,那就尽量不要选择这种方式
什么时候会导致消息丢失
RocketMQ 消息是放在磁盘里面的,而且默认选择异步刷盘策略

- 异步刷盘的过程中,MQ 节点损坏,消息就落不了盘
- 磁盘坏了
RocketMQ 采用一主多从的方式来备份消息,单个节点的磁盘数据坏了之后可以从其他节点中恢复