news 2026/8/13 0:18:50

高并发场景下的消息幂等性全攻略: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/8/4 16:45:49

微信防撤回工具终极指南:3步永久拦截撤回消息

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

作者头像 李华
网站建设 2026/8/9 17:21:20

电子课本下载神器:3分钟搞定PDF教材批量获取的终极方案

电子课本下载神器&#xff1a;3分钟搞定PDF教材批量获取的终极方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 还在为在线查阅教材而烦恼&#xff1f;每次备课…

作者头像 李华
网站建设 2026/8/8 3:01:46

CV-UNet Universal Matting部署:云服务器选型指南

CV-UNet Universal Matting部署&#xff1a;云服务器选型指南 1. 引言 1.1 背景与需求 随着图像处理在电商、设计、内容创作等领域的广泛应用&#xff0c;智能抠图技术已成为不可或缺的工具。CV-UNet Universal Matting 是基于 UNET 架构开发的一套通用图像抠图解决方案&…

作者头像 李华
网站建设 2026/7/31 6:51:27

如何用这款文献管理插件提升你的学术研究效率?5大核心功能详解

如何用这款文献管理插件提升你的学术研究效率&#xff1f;5大核心功能详解 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件&#xff0c;提供了一系列功能来增强 Zotero 的用户体验&#xff0c;如阅读进度可视化和标签管理&#xff0c;适合研究人员和学者。 项…

作者头像 李华
网站建设 2026/8/7 18:58:42

PingFangSC字体终极指南:跨平台兼容与性能优化完整方案

PingFangSC字体终极指南&#xff1a;跨平台兼容与性能优化完整方案 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件&#xff0c;包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 还在为不同操作系统字体渲染效果不一致…

作者头像 李华