开发者社区 > 云原生 > 中间件 > 正文

Seata中,tm 调用了rm ,然后rm失败回滚,tm 的事务是commit正常提交的是吧?

Seata中,tm 调用了rm ,然后rm失败回滚,tm这边不做任何处理的话,tm 的事务是commit正常提交的是吧?

展开
收起
嘟嘟嘟嘟嘟嘟 2024-03-26 23:20:50 70 0
3 条回答
写回答
取消 提交回答
  • RM失败回滚,TM肯定也需要回滚的啊,否者数据不一致了,怎么会正常commit呢,除非你的RM做了全局异常处理或者服务降级

    2024-05-24 12:37:35
    赞同 展开评论 打赏
  • 阿里云大降价~

    在Seata中,如果TM(Transaction Manager)调用了RM(Resource Manager)后,RM执行失败并进行了回滚,那么TM这边不做任何处理的话,事务将不会正常提交

    Seata作为一个分布式事务解决方案,其工作流程大致如下:

    1. 事务发起:TM向TC(Transaction Coordinator)请求发起全局事务,并获得一个代表该全局事务的XID。
    2. 分支事务绑定:TM把获得的XID绑定到分支事务上,这里的分支事务通常就是实际的业务操作。
    3. 资源管理器注册:RM需要向TC注册,并将自己的分支事务关联到对应的XID所标识的全局事务中。
    4. 执行结果上报:RM将执行的结果上报给TC,这一步骤是可选的,依赖于具体的配置和执行情况。
    5. 事务提交或回滚:根据全局事务的处理结果,TM会向TC发送提交或回滚的请求。如果是回滚,TC会通知所有相关的RM进行相应的回滚操作。

    在Seata的事务模型中,如果RM执行失败并触发了回滚,那么正常情况下,全局事务也应该被回滚。如果TM在收到RM回滚的消息后不进行任何处理,那么全局事务的状态可能会处于不确定状态,这通常是不被期望的。正确的做法是,当TM检测到分支事务执行失败时,它应该根据TC的指示来协调全局事务的回滚操作。

    总结来说,如果RM执行失败并进行了回滚,TM通常也需对全局事务进行相应的回滚处理,以保证事务的一致性。如果TM没有做出响应,可能会导致事务状态异常,从而影响到整个分布式系统的业务正确性。

    2024-03-27 08:46:48
    赞同 展开评论 打赏
  • 是的。此回答整理自钉群“3群-Apache Seata(incubating) 开源讨论群”

    2024-03-27 08:45:10
    赞同 展开评论 打赏

为企业提供高效、稳定、易扩展的中间件产品。

相关电子书

更多
《Seata 1.3 新特性以及如何参与社区》 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载