消息重复消费导致订单超卖?这4个绝招让消息只被消费一次!
消息重复消费导致订单超卖?这4个绝招让消息只被消费一次! 作为一名后端开发,经历过太多因为消息重复消费导致的"惨案": 某电商平台因为订单消息重复消费,导致同一件商品被卖出了10次,老板差点把我祭天 某支付系统因为回调消息重复处理,用户的钱被扣了3次,客服电话被打爆 某积分系统因为MQ消息重复投递,用户的积分被重复扣减,用户直接投诉到消协 消息重复消费,可以说是分布式系统中最让人头疼的问题之一。今天就结合自己踩过的坑,跟大家聊聊如何确保消息只被消费一次,让你的系统稳如老狗。 一、消息为什么会重复消费?这3个场景你肯定遇到过 在讲解决方案之前,我们先得搞清楚消息为什么会重复。根据我多年的踩坑经验,主要有以下3个原因: 1. 网络抖动导致的重复投递 MQ为了保证消息不丢失,都有重试机制。当网络出现抖动时,生产者以为消息没发出去,就会重新发送,导致消费者收到多条相同的消息。 真实场景:我之前用RabbitMQ的时候,网络偶尔会出现500ms的延迟,生产者以为消息没发出去,结果重复发送了3次,消费者一下子收到了3条一模一样的订单消息。 2. 消费者处理超时导致的重复投递 当消费者处理消息时......