Seata中tcc模式下 try包含数据库+redis+一些逻辑处理返回,假设逻辑处理出现了问题,我想利用cancel回滚redis 但是因为开启了useTCCFence 导致回滚不会执行cancel回滚redis 这块是不是有问题呀?异常了也算执行了prepare只是部分失败了,应该插入tcc_fence_log记录,回滚的时候应该允许回滚,tcc的useTCCFence也是依赖事务的 那我使用非事务型数据库是不是不行呀?
在 Seata 中,TCC 模式下的 try 阶段通常包含了多个操作,比如数据库操作、缓存操作、逻辑处理等。如果在 try 阶段中的某个操作发生了异常,Seata 会自动触发 cancel 阶段的回滚操作。
但是,如果你在 Seata 中开启了 useTCCFence 参数,那么 Seata 就会启用 TCC 的围栏机制。在这种情况下,如果 try 阶段中的某个操作发生了异常,Seata 会记录下这个异常,并记录到 TCC_FENCE_LOG 表中。此时,Seata 会忽略这个异常,并继续执行 try 阶段中的其他操作。
在 TCC 模式下,使用非事务型数据库是可以的,但是你需要注意,在 TCC 模式下,Seata 会依赖事务来协调分布式事务的执行。所以,如果你使用的是非事务型数据库,那么 Seata 就无法保证事务的原子性。因此,建议在 TCC 模式下使用事务型数据库。
希望这能帮到你!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。