当前位置: 首页 > 知识库问答 >
问题:

SAGA事务中回滚失败怎么办

楚嘉玉
2023-03-14

让我们想象一下这种情况,然后我们在微服务中使用SAGA方法管理分布式事务。

失败的场景:

    < li >服务A成功完成任务,并将消息发送给服务B < li >服务B成功完成任务,并将消息发送到服务C < li >服务C失败,并向服务B发送消息以撤消交易。 < li >服务B尝试撤消交易但失败。

因此,我们有不一致的数据,这是不可接受的。问题是,SAGA模式下事务回滚失败的情况如何处理?

共有1个答案

顾烨磊
2023-03-14
  • 服务B立即重试但失败
  • 服务B在几秒钟后重试但失败
  • 服务B几分钟后重试但失败
  • 消息被移动到“死信队列”,因为它没有被标记为由服务B处理
  • 工程师修复服务B上的错误
  • 工程师从“死信队列”重新发送消息
  • 服务B成功处理消息

阅读有关此主题的更多信息https://codeopinion.com/handling-failures-in-message-driven-architecture/

 类似资料:
  • 我列出了一个问题“Spring事务失败回滚”。我有一个服务类,它调用2 DAO将数据插入到数据库表中。 我的事务配置: 我的服务和dao定义如下:

  • 本文向大家介绍java事务回滚失败问题分析,包括了java事务回滚失败问题分析的使用技巧和注意事项,需要的朋友参考一下 Spring-Java事物回滚失效处理最近在做项目中,无意间发现有个类在抛事物回滚操作,数据也正常的插入到数据库当中了,于是仔细查看看一下具体原因。 一切还是要从Java的检查型异常和非检查型异常说起。 那么什么是检查型异常什么又是非检查型异常呢? 最简单的判断点有两个: 1.继

  • 问题是,即使在为Exception.class声明回滚之后,事务仍然没有回滚。 1.我的数据源

  • 问题内容: 我在EJB3无状态会话Bean中使用CMT。另外,我还创建了自己的具有注释“ @ApplicationException(rollback = true)”的异常。 要回滚事务时是否必须使用“ context.setRollbackOnly()”? 我可以通过在bean的public方法内抛出异常来回滚事务吗? 如果是这样(对Q#2的回答是“是”),我是否必须通过在方法中声明异常来将异

  • 问题内容: 当服务中抛出RuntimeException时,我使用Grail的回滚功能将所有服务更新为事务性。在大多数情况下,我都这样做: 无论如何,我想验证这是否确实会回滚事务……这让我开始思考是否在这一点上已经提交了。此外,如果没有,设置flush:true会改变这一点吗?我对Spring / Hibernate如何完成所有这些工作不是很熟悉:) 问题答案: 是的,那样做。 默认情况下,Gra

  • 我正在使用spring-test运行JUnit测试,我的代码如下所示 我的问题是我希望我的测试不影响其他测试。所以我想为每个测试创建一些类似回滚的东西。我为此找了很多,但到目前为止一无所获。我使用Hibernate和MySql来实现这个