June 27, 2024About 1 min
设置30分钟后检测订单支付状态实现起来非常简单,但是存在两个问题:
- 如果并发较高,30分钟可能维积消息过多,对MQ压力很大
- 大多数订单在下单后1分钟内就会支付,但是却需要在MQ内等待30分钟,浪费资源
如何保证支付服务与交易服务之间的订单状态一致性?
首先,支付服务会正在用户支付成功以后利用MQ消息通知交易服务
完成订单状态同步。
其次,为了保证MQ消息的可靠性,我们采用了生产者确认机制、消
费者确认、消费者失败重试等策略,确保消息投递和处理的可靠性。同
时也开启了MQ的持久化。避免因服务宕机导致消息丢失
最后,我们还在交易服务更新订单状态时做了业务幂等判断,避免
因消息重复消费导致订单状态异常。
如果交易服务消息处理失败,有没有什么兜底方案?
我们可以在交易服务设置定时任务,定期查询订单支付状态。这样即
便MQ通如失败,还可以利用定时任务作为兜底方案,确保订单支付
状态的最终一致性。