在一个涉及订单、库存、优惠券的分布式场景中,追求最终一致性(Eventual Consistency)通常意味着放弃强一致性(如 2PC/XA),转而采用 BASE 理论。 针对你的场景,最常用且成熟的方案主要有三种:基于消息队列的事务消息(如 RocketMQ)、TCC(Try-Confirm-Cancel)模式 和 Seata 分布式事务框架。 以下是具体的方案设计与对比: --- 方案一:基于 RocketMQ 的事务消息(推荐:高并发、解耦) 这是互联网大厂最常用的方案,核心思想是将“本地事务执行”与“消息发送”绑定,确保订单创建成功,消息一定发出。 1. 核心流程 假设动作是:用户下单 -> 创建订单 -> 扣减库存 -> 使用优惠券。 1. 发送半消息(Half Message): 订单服务(Producer)向 MQ 发送一条“预备下单”的消息。 此时消息对消费者(库存、优惠券服务)不可见。 2. 执行本地事务: MQ 确认收到半消息后,订单服务执行本地数据库操作()。 3. 提交或回滚消息: 如果本地事务成功: 订单服务向 MQ 发送 Commit 指令。MQ 将...