rabbitMq
rabbitMQ消息的重复消费问题如何解决的?
❒ 每条消息设置一个唯一的标识id ✔ 生产端:发送消息时,在消息的 headers 或 body 中加入唯一标识(如 UUID、雪花算法 ID、业务单号 + 时间戳)。 ✔ 消费端:提取该唯一 ID,通过「数据库唯一索引 / Redis 原子操作」判断是否已处理。 ❒ 幂等方案:【分布式锁、数据库锁(悲观锁、乐观锁)】 ✔ 若消息本身携带业务唯一标识(如订单号、用户 ID + 操作类型),可直接基于业务字段做幂等: ✔ 例:更新用户积分(用户 ID + 积分批次号)→ 先查询积分是否已更新,已更新则跳过; ✔ 例:创建订单(订单号)→ 订单号作为唯一主键,重复创建会触发主键冲突,直接捕获并忽略。
❒ 解决方案: ✔ 每条消息设置一个唯一递增的版本号 ✔ 幂等方案:【分布式锁、数据库锁(悲观锁、乐观锁)】