对于分布式事务的疑问?

来源:8-13 实际开发中的经验小结

慕沐3053333

2021-05-10

我们基于RabbitMQ开发分布式事务框架,确实保证了消息100%投递和消费端重试。

我在消费端重试这有一个疑问。

假如A服务和B服务之间通过该章节完成的分布式事务框架进行通信,A服务投递了某账号扣100元的消息到MQ集群,B服务获得该消息后,在数据库中对该账号扣减了100元,也提交了事务,在返回ack给MQ集群时突然宕机了,MQ集群一直没有收到消费者的确认信号,并且由于宕机导致消费者已经和MQ集群断开连接,消息就会重回队列。之后宕机的B服务恢复了,又再次消费了该消息,又再扣减了100元。这样岂不是多扣了100元?


写回答

1回答

Moody

2021-05-11

B服务可以在事务的最后ACK消息,这样ACK异常时,事务可以回滚。

0
4
Moody
回复
慕沐3053333
确实有这样的问题,没法保证所有极端情况都能规避。这种情况可以考虑查库来确认这个消息是不是重复的。
2021-05-14
共4条回复

RabbitMQ精讲,提升工程实践能力,培养架构思维

消息驱动架构+订单状态机,二次开发,手写分布式事务框架。

470 学习 · 205 问题

查看课程