就是几个线程的结果如果都成功了,就一起提交。如果有一个失败就全部回滚,并给出相关提示信息?网上没找到比较好的方案
8 回答

慕斯王
TA贡献1864条经验 获得超2个赞
多个线程好解决,楼主想问的是不同进程怎么同步事务吧,比如多个dubbo服务。
确实有这个问题,首先有这样的技术,可以强一致,但效率牺牲太多,很少有公司这么干;大多数做法都是:服务A提交后,在某个东西(比如zookeeper)上记录节点;服务B提交后,记录另一个节点(这些节点都在表示本次事务的树枝节点下)……后续有个监听器类的东西,检查树枝节点下的节点数、状态等,如果有问题分别回滚或重试或人工干预等等……

慕桂英4014372
TA贡献1871条经验 获得超13个赞
在主方法new 一个InheritableThreadLocal 并设值为true,线程中如果出错则把值改为false。线程全部执行完之后,判断InheritableThreadLocal 的值,如果为false,你就手动抛出异常声明式回滚,或者自己写手动回滚。这样应该可以达到你的要求吧

拉丁的传说
TA贡献1789条经验 获得超8个赞
CountDownLatch
加上一个封装 transaction 和 state 的 queue 每个线程执行时,去队列中拿一个事务,执行完finally 扔回去并 count() , 并设置state = true;
最后在主线程判断所有transaction 的state 都是true ,然后就全部提交
添加回答
举报
0/150
提交
取消