关于dubbo分布式事务到底如何定义

发布于 2021-12-06 16:38:08 字数 306 浏览 812 评论 5

今天测试dubbo事务,一开始我以为是2个服务注册到不同的Ip就会有事务问题,首先我把userService服务注册到我这边某测试ip的zk上,接着我又把redService注册到我本地的zk。然后调用userService.insert(Object obj);这个方法里面先是插入数据到user表,然后调用redService服务插入到red表,等成功之后我在下面故意抛出异常,原以为user的会回滚,但redService因为是远程rpc调用所以不会回滚。打开数据库刷新一看都没数据。所以我现在有点乱, 是不是分库分表不同数据源才算分布式事务了呢?我说的这个案例什么时候才会有分布式事务问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

路还长,别太狂 2021-12-08 16:34:39

还有人吗?

叹沉浮 2021-12-08 15:16:01

没有用到JTA

累赘 2021-12-08 10:45:33

按照你的说法,我这边确实跟你描述的一样

柒夜笙歌凉 2021-12-08 10:26:55

是rpc没错,你在写入red时抛出异常是否也将异常层层向上响应到了user。如果是检查你的事务配置是AOP还是注解。有没有切insert,如果切了可能是两个insert因为异常都各自回滚了所以没有数据。虽然你是两个工程,但如果都是同样的事务配置这是有可能的。另外就是是否有使用JTA一类的分布式事务工具包。

悸初 2021-12-07 19:22:32

代码如下:

@Override
    public Long insertEntity( User user ) {
        Long insertEntityReturnId = userMapper.insertEntity(user);
        if ( insertEntityReturnId > 0 ) {
            RED red = new RED();
            Long redId = redService.insertEntity(red);//rpc调用测试的服务
            int i = 1/0;//故意异常
            return user.getId();
        } else {
            return 0L;
        }
    }

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文