3
回答
关于dubbo分布式事务到底如何定义
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   

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

举报
Kevin_Zhan
发帖于1周前 3回/191阅
共有3个答案 最后回答: 1周前

代码如下:

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

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