news 2026/3/12 14:50:10

高并发场景下的消息幂等性全攻略: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/9 2:23:18

5分钟部署FLUX.1:小白必看云端GPU教程,免环境配置

5分钟部署FLUX.1&#xff1a;小白必看云端GPU教程&#xff0c;免环境配置 你是不是也遇到过这样的情况&#xff1a;产品经理突然要验证一个AI图像生成功能&#xff0c;说“客户明天就要看效果”&#xff0c;可IT部门排期两周后才能支持&#xff0c;自己手上的MacBook又跑不动本…

作者头像 李华
网站建设 2026/3/6 12:26:27

Zotero Style终极配置指南:打造个性化文献管理体验

Zotero Style终极配置指南&#xff1a;打造个性化文献管理体验 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件&#xff0c;提供了一系列功能来增强 Zotero 的用户体验&#xff0c;如阅读进度可视化和标签管理&#xff0c;适合研究人员和学者。 项目地址: ht…

作者头像 李华
网站建设 2026/3/10 21:57:00

鸣潮自动化工具完整使用指南:从安装到精通

鸣潮自动化工具完整使用指南&#xff1a;从安装到精通 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 鸣潮自动化工具是一…

作者头像 李华
网站建设 2026/3/10 20:13:22

Qwen3-14B懒人方案:不用装环境,打开网页直接体验中文AI

Qwen3-14B懒人方案&#xff1a;不用装环境&#xff0c;打开网页直接体验中文AI 你是不是也遇到过这样的情况&#xff1f;作为市场总监&#xff0c;手头一堆竞品资料等着分析&#xff0c;报告明天就要交&#xff0c;可IT部门说部署一个AI大模型要两周起步——等不起、催不动、自…

作者头像 李华