关于dubbo分布式事务到底如何定义
今天测试dubbo事务,一开始我以为是2个服务注册到不同的Ip就会有事务问题,首先我把userService服务注册到我这边某测试ip的zk上,接着我又把redService注册到我本地的zk。然后调用userService.insert(Object obj);这个方法里面先是插入数据到user表,然后调用redService服务插入到red表,等成功之后我在下面故意抛出异常,原以为user的会回滚,但redService因为是远程rpc调用所以不会回滚。打开数据库刷新一看都没数据。所以我现在有点乱, 是不是分库分表不同数据源才算分布式事务了呢?我说的这个案例什么时候才会有分布式事务问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
还有人吗?
没有用到JTA
按照你的说法,我这边确实跟你描述的一样
是rpc没错,你在写入red时抛出异常是否也将异常层层向上响应到了user。如果是检查你的事务配置是AOP还是注解。有没有切insert,如果切了可能是两个insert因为异常都各自回滚了所以没有数据。虽然你是两个工程,但如果都是同样的事务配置这是有可能的。另外就是是否有使用JTA一类的分布式事务工具包。
代码如下:
@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;
}
}