如何保证消息的可靠性
- 生产者发送阶段:开启发送确认,失败了需要重试;核心业务可以落本地消息表或者事务消息,避免本地事务成功但是消息没有发送出去。
- broker存储阶段:消息要持久化,关键的topic/队列配置副本高可用队列,刷盘策略和副本确认策略要和业务可靠性要求匹配。
- 消费者处理阶段:业务处理成功后再ACK或提交offset;处理失败要重试、斤死信队列或进入补偿流程。
- 业务兜底阶段:通过对账任务、补偿任务、警告和人工处理兜住极端异常。
不同的MQ的实现细节不同,但思路都一样:确认、持久化、重试、幂等、补偿。
如何处理重复消费幂等
生产环境通常很难保证消息绝对只被消费一次,因此必须做幂等操作。
幂等方案:
- 业务唯一索引
- 状态机
- 消费记录表
- redis去重
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 coder-xuyong!
评论



