RocketMQ生产04:消息丢失排查 - 全链路追踪与问题定位

引言:消息丢了怎么办? 凌晨接到告警:“订单支付成功,但库存未扣减!“排查半天,发现是 RocketMQ 消息丢了。消息到底在哪个环节丢的?如何快速定位?如何避免再次发生? 消息丢失的常见表现: ❌ Producer 发送成功,Consumer 未收到 ❌ Broker 重启后,部分消息消失 ❌ Consumer 消费后,业务未执行 ❌ 高峰期消息神秘失踪 本文目标: ✅ 理解消息丢失的所有可能环节 ✅ 掌握全链路排查方法 ✅ 建立消息可靠性保障机制 ✅ 实现端到端消息追踪 一、消息丢失的三个环节 1.1 全链路示意图 ┌──────────┐ ┌──────────┐ ┌──────────┐ │ Producer │ (1) │ Broker │ (2) │ Consumer │ │ ├──────>│ ├──────>│ │ └──────────┘ └──────────┘ └──────────┘ ⚠️ ⚠️ ⚠️ 发送端丢失 存储端丢失 消费端丢失 三个风险点: Producer 发送丢失:网络故障、未等待响应 Broker 存储丢失:异步刷盘、磁盘故障 Consumer 消费丢失:自动ACK、业务异常未重试 二、发送端丢失排查 2.1 同步发送 vs 异步发送 2.1.1 同步发送(推荐) // ✅ 正确:等待发送结果 try { SendResult result = producer.send(message); if (result.getSendStatus() == SendStatus.SEND_OK) { log.info("发送成功,msgId={}", result.getMsgId()); } else { log.error("发送失败,status={}", result.getSendStatus()); // 重试或告警 } } catch (Exception e) { log.error("发送异常", e); // 异常处理:重试、记录数据库、告警 } 关键点: ...

2025-11-15 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...