让我们想象一下这种情况,然后我们在微服务中有分布式事务,由SAGA方法管理。存在先调用业务A,再调用业务B,再调用业务c的事务
失败的场景:
- 服务A成功完成任务并将消息发送给B服务
- 服务B成功完成任务并将消息发送给C服务
- 服务C失败,向服务B发送消息撤销事务。
- 服务B试图撤销事务,但失败。
结果,我们的数据不一致,这是不可接受的。问题是,如何处理在SAGA模式下事务回滚失败的情况?
- 服务B立即重试,但失败
- 服务B在几秒钟后重试,但失败
- 服务B几分钟后重试,但失败
- 消息被移动到"死信队列";因为它没有被标记为服务B处理
- 工程师修复服务B的错误
- 工程师重新发送来自"死信队列"的消息
- 服务B成功处理消息
阅读更多关于此主题https://codeopinion.com/handling-failures-in-message-driven-architecture/