news 2026/4/16 10:17:06

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

RevokeMsgPatcher终极指南:让撤回消息无处可逃的实用工具

RevokeMsgPatcher终极指南&#xff1a;让撤回消息无处可逃的实用工具 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode…

作者头像 李华
网站建设 2026/4/13 11:58:07

ESP32开发环境搭建故障快速诊断与解决指南

ESP32开发环境搭建故障快速诊断与解决指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 还在为ESP32开发板在Arduino IDE中无法正常安装而困扰吗&#xff1f;这个问题在物联网开发者中极…

作者头像 李华
网站建设 2026/4/9 18:50:12

RevokeMsgPatcher深度技术解析:微信防撤回实现架构详解

RevokeMsgPatcher深度技术解析&#xff1a;微信防撤回实现架构详解 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.c…

作者头像 李华
网站建设 2026/4/13 18:10:28

123云盘完全解锁教程:5步获得永久会员特权

123云盘完全解锁教程&#xff1a;5步获得永久会员特权 【免费下载链接】123pan_unlock 基于油猴的123云盘解锁脚本&#xff0c;支持解锁123云盘下载功能 项目地址: https://gitcode.com/gh_mirrors/12/123pan_unlock 还在为123云盘的下载速度和文件限制而困扰吗&#xf…

作者头像 李华
网站建设 2026/4/16 8:58:45

Open Interpreter案例解析:教育行业自动批改系统实现

Open Interpreter案例解析&#xff1a;教育行业自动批改系统实现 1. 背景与问题提出 在现代教育技术的发展中&#xff0c;自动化教学辅助系统正逐步成为提升教学效率的重要工具。尤其是在编程类课程中&#xff0c;教师常常面临大量学生代码作业的批改任务&#xff0c;传统人工…

作者头像 李华
网站建设 2026/4/3 22:08:23

123云盘功能解锁技术方案:基于用户脚本的会员特权模拟实现

123云盘功能解锁技术方案&#xff1a;基于用户脚本的会员特权模拟实现 【免费下载链接】123pan_unlock 基于油猴的123云盘解锁脚本&#xff0c;支持解锁123云盘下载功能 项目地址: https://gitcode.com/gh_mirrors/12/123pan_unlock 对于需要频繁使用123云盘进行文件存储…

作者头像 李华