news 2026/3/27 12:06:52

高并发场景下的消息幂等性全攻略:10万+ TPS 精确一次消费实践指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
高并发场景下的消息幂等性全攻略:10万+ TPS 精确一次消费实践指南

在分布式系统中,“消息只被消费一次” 是一个经典又棘手的问题。 在高并发(峰值 TPS 10万+)场景下,网络抖动、重试机制、重复投递、消费者故障等,都可能导致消息被多次处理。 如果幂等性设计不当,轻则重复扣库存,重则导致资金错误、业务数据混乱。

本文将带你从 消息队列 → 生产者 → 消费者 → 存储层 → 监控层 全链路拆解,实现真正的“精确一次(Exactly Once)” 消费语义。


🧩 1. 消息队列层面的保障

1.1 选择合适的 MQ

# ✅ RocketMQ - 推荐选择 - 支持事务消息(本地事务 + 消息半提交) - 消息重试机制完善 - 顺序消息支持 - 性能与一致性平衡优秀 # ⚙️ Kafka - 可选方案 - 支持精确一次语义(EOS) - 需要事务生产者 + 原子提交 offset 配合 - 配置复杂但吞吐更高

1.2 生产者端的防重设计

// 唯一消息ID生成器 public class MessageIdGenerator { public static String generateMessageId(String businessKey) { return businessKey + "_" + System.currentTimeMillis() + "_" + ThreadLocalRandom.current().nextInt(1000); } } // 生产者发送事务消息 public class OrderMessageProducer { public SendResult sendOrderMessage(Order order) { Message message = new Message("ORDER_TOPIC", "CREATE", JSON.toJSONBytes(order)); // 设置唯一业务Key message.setKeys(order.getOrderNo()); // RocketMQ事务消息发送 return rocketMQTemplate.sendMessageInTransaction( "order-transaction-group", message, null); } }

💡 要点:MessageId 必须具备全局唯一性且可追溯到业务主键,用于后续幂等判断。


🧱 2. 消费者端的幂等性设计

2.1 基于 Redis 分布式锁(适用于中等并发)

@Component public class OrderMessageConsumer { @Autowired private RedisTemplate<String, String> redisTemplate; @RocketMQMessageListener(topic = "ORDER_TOPIC", consumerGroup = "order-consumer-group") public void handleOrderMessage(Message message) { String orderNo = message.getKeys(); String lockKey = "order_consume_lock:" + orderNo; // 尝试获取分布式锁 Boolean lockAcquired = redisTemplate.opsForValue() .setIfAbsent(lockKey, "processing", Duration.ofMinutes(5)); if (!Boolean.TRUE.equals(lockAcquired)) { // 正在处理或已处理,直接返回
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/25 20:40:37

Ghost Downloader:重新定义智能下载体验的跨平台解决方案

Ghost Downloader&#xff1a;重新定义智能下载体验的跨平台解决方案 【免费下载链接】Ghost-Downloader-3 A multi-threading async downloader with QThread based on PyQt/PySide. 跨平台 多线程下载器 协程下载器 项目地址: https://gitcode.com/GitHub_Trending/gh/Ghos…

作者头像 李华
网站建设 2026/3/24 13:55:11

国家中小学智慧教育平台电子课本解析工具:一键下载全套PDF教材

国家中小学智慧教育平台电子课本解析工具&#xff1a;一键下载全套PDF教材 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 还在为教材资源分散而烦恼吗&#xff1…

作者头像 李华
网站建设 2026/3/24 7:30:17

H3CNE-Security安全GB0-510题库(带详细解析)

继续分享一下题库吧&#xff0c;完整版已经发布在“题主”小程序上了&#xff0c;需要的同学可以自己去找一下。下列关于L2TP的说法正确的有A、用户的远程系统可以通过一个远程接入方式接入到运营商的LAC中&#xff0c;由LAC对LNS发起L2tp隧道并建立会话B、当用户的远程系统使用…

作者头像 李华
网站建设 2026/3/25 0:08:09

跨平台打码方案:AI隐私卫士网页版,手机电脑都能用

跨平台打码方案&#xff1a;AI隐私卫士网页版&#xff0c;手机电脑都能用 你是不是也遇到过这样的情况&#xff1f;作为旅行博主&#xff0c;在异国街头拍了一段热闹的市集视频&#xff0c;画面里路人来来往往&#xff0c;可发布前却犯了难——直接上传可能侵犯他人隐私&#…

作者头像 李华
网站建设 2026/3/20 8:15:25

RevokeMsgPatcher终极指南:彻底解决微信消息撤回问题

RevokeMsgPatcher终极指南&#xff1a;彻底解决微信消息撤回问题 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com…

作者头像 李华