Seata中测试过程中,在开启 GlobalTransactional 的服务中使用 @DubboReference 引用了 TCC 服务,但是 TCC 服务一阶段方法中的 BusinessActionContext 始终为 null,也始终收不到二阶段提交的消息。dubbo 版本2.7.8 seata-spring-boot-starter 1.3.0 springboot-2.3.2 这是为什么呀?不能直接这么用吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您遇到的问题中,TCC 服务一阶段方法中的 BusinessActionContext
为 null,并且二阶段提交的消息未收到,这可能是由几个原因导致的。根据您的技术栈版本(Dubbo 2.7.8、seata-spring-boot-starter 1.3.0、Spring Boot 2.3.2)和参考资料,我们可以分析并尝试解决此问题:
确保Seata与Dubbo集成配置正确:
检查TCC注解使用是否准确:
@TwoPhaseBusinessAction
注解,并且指定了正确的commit和rollback方法。确认Try方法的第一个参数是BusinessActionContext
,并且该参数在Confirm和Cancel方法中也被正确使用。事务传播行为设置:
@GlobalTransactional
的服务中,确保通过@DubboReference
引用TCC服务时,事务传播行为设置得当。如果调用方事务传播行为不支持或者配置不当,可能导致事务上下文无法传递到TCC服务。Seata与Dubbo版本兼容性:
日志与跟踪:
Nacos配置一致性(如果使用Nacos作为注册中心):
综上所述,问题可能涉及配置、代码实现或版本兼容性等多个方面。逐一排查上述点,结合详细的日志信息,应该能帮助您定位并解决问题。如果以上步骤均未发现明显错误,建议查阅相关社区或官方论坛,看是否有其他用户遇到类似问题并分享了解决方案。