2 u013368041 u013368041 于 2016.03.12 15:27 提问

dubbo分布式事务怎么处理

现在公司遇到一个问题 , 服务器A上跑了一个dubbo服务使用数据库A , 服务器B上也跑了一个dubbo服务使用数据库B, 现在服务器C里调用这两个服务 , 那么要如何实现这两个dubbo服务的事务呢 , 望大神解答啊???

7个回答

wenxuechaozhe
wenxuechaozhe   2016.03.12 17:28

是直接调用的service服务么?如果是通过controller层调用,将对应controller调用服务配置事务处理,若调用失败,则直接数据回滚。

mengjiaoyao
mengjiaoyao 不可行把。
一年多之前 回复
gambool
gambool   2016.07.27 14:03

你可以试着以下思路,先操作A数据库,把所有的参数都传到A服务上,在A服务的方法里,先执行A的数据库操作,再在A服务中把剩下的参数传到B服务中,再在B中进行数据库操作,B服务出现异常,会把异常抛到A服务,A服务方法的上一步数据库操作会回滚!
正常的流程就是:C调用A,A调用B
出现异常时:B回滚,抛异常给A,A回滚,抛异常给C,C回滚。

satanzhf
satanzhf 如果A服务同时要调用B和C服务,那怎么解决?C回滚了,只能让A回滚,B成功了,到时候A还是要去做补偿
一年多之前 回复
mengjiaoyao
mengjiaoyao 感觉你这个方案可行,但是如果架设很多服务和数据库,会把程序开发者搞死的,再说很多业务功能都是比较负载的。
一年多之前 回复
roncoo
roncoo   2016.07.20 15:26

目前比较多的解决方案有几个:
一、结合MQ消息中间件实现的可靠消息最终一致性
二、TCC补偿性事务解决方案
三、最大努力通知型方案
第一种方案:可靠消息最终一致性,需要业务系统结合MQ消息中间件实现,在实现过程中需要保证消息的成功发送及成功消费。即需要通过业务系统控制MQ的消息状态
第二种方案:TCC补偿性,分为三个阶段TRYING-CONFIRMING-CANCELING。每个阶段做不同的处理。
TRYING阶段主要是对业务系统进行检测及资源预留
CONFIRMING阶段是做业务提交,通过TRYING阶段执行成功后,再执行该阶段。默认如果TRYING阶段执行成功,CONFIRMING就一定能成功。
CANCELING阶段是回对业务做回滚,在TRYING阶段中,如果存在分支事务TRYING失败,则需要调用CANCELING将已预留的资源进行释放。
第三种方案:最大努力通知xing型,这种方案主要用在与第三方系统通讯时,比如:调用微信或支付宝支付后的支付结果通知。这种方案也是结合MQ进行实现,例如:通过MQ发送http请求,设置最大通知次数。达到通知次数后即不再通知。
具体的案例你也可以参考下这篇博客,它上面有完整的电商系统分布式事务实现案例:http://www.roncoo.com/article/detail/124243

whs99
whs99 回复qq_15424473: 可以先了解下内容,合适的话作为参考
大约一年之前 回复
qq_15424473
qq_15424473 这完全驴头不对马嘴,不要误导别人了
一年多之前 回复
itfirefly
itfirefly   2016.09.03 16:11

这广告打得不错,太屌了

lgk56
lgk56   2016.09.18 18:39

楼主搞定这个问题没,我也遇到了这个问题,不知怎么整 啊,求指点

whs_321
whs_321   2016.11.02 14:39

分布式事务解决方案的效果演示(结合支付系统真实应用场景):
http://www.iqiyi.com/w_19rsveqlhh.html

woaixinxin123
woaixinxin123   2017.06.15 11:25

我基于spring的 tx下 PlatformTransactionManager,结合dubbo框架实现了对dubbo的分布式事务支持。框架很好的兼容并可以区分本地和分布式事务,并且该框架可以兼容任何基于spring的db框架,例如mybaits hibernate等。在需要的地方只需要添加一个分布式事务注解就行。我提供了一个TxManager服务来管理所有业务模块的事务调度,本身TxManager也可以做集群化。我把框架开源放在了github上,详细见:https://github.com/1991wangliang/transaction,希望大家多提提意见,共同帮我维护好框架。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!