如果在SAGA事务中回滚失败怎么办



让我们想象一下这种情况,然后我们在微服务中有分布式事务,由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/

最新更新