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

Kevin_Zhan 发布于 04/16 18:48
阅读 1K+
收藏 3

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

加载中
0
Kevin_Zhan
Kevin_Zhan

代码如下:

@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;
        }
    }

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