Seata中使用AT 模式,比如有两个事务,事务o是创建订单记录,事务s是扣减库存, o事务里调用了扣减库存远程服务(s事务)接口,调用时捕获调用异常, s事务异常, 最终呈现的结果是,o事务正常提交,没有回滚,AT 模式很依赖远程服务的异常处理,这个和不使用AT 模式使用起来区别在哪,怎么才能写出o事务的二阶段回滚场景呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Seata中使用AT模式处理分布式事务时,确实对远程服务的异常处理有较高依赖,这主要是因为AT模式通过自动补偿机制来确保事务的最终一致性。针对您提到的场景,我们可以这样分析和操作:
事务定义:
异常处理:
二阶段回滚触发:
@TxcTransaction
注解来标识事务边界。综上所述,AT模式相较于不使用分布式事务管理器的情况,主要区别在于它能自动管理事务的生命周期,特别是异常情况下的回滚逻辑,减轻了开发者手动编写补偿逻辑的负担。但这也要求开发者严格遵守框架规则,正确处理服务间的调用异常,以充分利用AT模式提供的自动化补偿能力。