MQ 四大经典问题
掌握四大问题产生原因 + 完整解决方案(通用所有MQ)
一、消息丢失问题
丢失三个阶段
生产者发送阶段丢失:网络抖动、未确认
MQ服务端丢失:未持久化、宕机
消费者消费阶段丢失:未消费完毕手动ACK、程序异常
通用解决方案
生产者:开启确认机制、重试机制
服务端:开启持久化+多副本集群
消费者:手动ACK,业务成功再确认
二、消息重复消费问题
产生原因
网络超时、ACK丢失、重试发送、集群重试,MQ天然不保证只消费一次,只保证至少一次
解决方案(幂等性)
唯一消息ID去重
业务唯一键幂等(订单号)
数据库唯一索引防重
Redis 分布式锁/去重表
三、消息积压问题
原因
消费者消费速度 < 生产者生产速度
消费者阻塞、报错、死锁
消费逻辑太重、IO阻塞
解决方案
优化消费代码,减少耗时
增加消费者实例、提高并发
拆分大消息、拆分队列
异常消息转入死信队列,不阻塞主流程
四、消息无序问题
原因
多消费者并发消费、多分区并行消费导致顺序错乱
解决方案
有序业务统一打相同key,路由到同一个队列/分区
单消费者串行消费
RocketMQ 支持严格顺序消息

