Seata中为什么分支事务注册时, 全局事务状态不是begin呢?

Seata中为什么分支事务注册时, 全局事务状态不是begin呢?

展开
收起
fuxixi 2022-09-19 15:17:44 969 分享 版权
1 条回答
写回答
取消 提交回答
  • 异常:Could not register branch into global session xid = status = Rollbacked(还有Rollbacking、AsyncCommitting等等二阶段状态) while expecting Begin

    描述:分支事务注册时,全局事务状态需是一阶段状态begin,非begin不允许注册。属于seata框架层面正常的处理,用户可以从自身业务层面解决。

    出现场景(可继续补充)

    分支事务是异步,全局事务无法感知它的执行进度,全局事务已进入二阶段,该异步分支才来注册 服务a rpc 服务b超时(dubbo、feign等默认1秒超时),a上抛异常给tm,tm通知tc回滚,但是b还是收到了请求(网络延迟或rpc框架重试),然后去tc注册时发现全局事务已在回滚 tc感知全局事务超时(@GlobalTransactional(timeoutMills = 默认60秒)),主动变更状态并通知各分支事

    2022-09-19 16:06:01
    赞同 展开评论

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

收录在圈子:
+ 订阅
阿里云中间件主要有包含这么几个: 分布式关系型数据库DRDS_水平拆分 做数据库扩展性的 、消息队列MQ 是做消息的中间件、企业级分布式应用服务EDAS 做分布式服务的、还有一些其他的中间件,比如配置服务、缓存等等。
还有其他疑问?
咨询AI助理