云计算百科
云计算领域专业知识百科平台

异步方案的幂等设计和非异步相比有什么差异

同步方案的幂等设计:充值送token任务非异步设计下如何实现幂等性-CSDN博客

1.幂等边界不同

  • 同步(syncChain):

                整条链路在一个 @Transactional 事务内完成(RechargeService.sync),幂等

                只需防「同一请求重复进入」。idempotencyCheckCmp 命中已有订单即 isEnd() 终止整

                链,后续全部跳过。

  • 异步(produce + consume):

                拆成两个独立事务 + MQ 传递。幂等边界从「单 DB 事务」扩展为「DB + MQ + 消费者

                进程」,必须防消息重复投递 / redelivery / DLQ 重放 / 生产者重扫,而不仅是客户端重

                试。

2.幂等粒度与幂等键不同

维度同步异步

入口幂等键

idempotentKey(订单级)

produce 端同样用 idempotentKey

发放幂等键

复用订单号 orderNo 作为 bizId

consume 端用 orderNo/bizId 做发放幂等

检查点

idempotencyCheckCmp(订单是否存在)

produce:idempotencyCheckCmp;consume:consumeIdempotencyCmp(流水是否存在)

异步把「订单创建幂等」与「Token 发放幂等」拆成两层:

produce 端防重复建单,consume 端防重复发放

3.同步仅靠 DB 约束 + CAS

   异步额外需要消息可靠性 + 消费幂等

同步方案仅需要一个事务包着就可以了,而异步方案需要生产端用事务包着、消费端用事务包着;中间依托消息队列,配合本地消息表、重投、死信、双层幂等来实现最终一致性,无法做到全局原子性。其他部分同步和异步方案相比,异步任务节点有调整、幂等多了一层、异步会出现订单已支付但奖励未发放的中间状态,除此之外底层很多业务组件、DB 兜底逻辑区别不大。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 异步方案的幂等设计和非异步相比有什么差异
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!