`
m635674608
  • 浏览: 5043209 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

dubbo 分布式事务

 
阅读更多
我觉得事务的管理不应该属于Dubbo框架, 
Dubbo只需实现可被事务管理即可, 
像JDBC和JMS都是可被事务管理的分布式资源, 
Dubbo只要实现相同的可被事务管理的行为,比如可以回滚, 
其它事务的调度,都应该由专门的事务管理器实现。 

在Java中,分布式事务主要的规范是JTA/XA, 
其中:JTA是Java的事务管理器规范, 
XA是工业标准的X/Open CAE规范,可被两阶段提交及回滚的事务资源定义, 
比如某数据库实现了XA规范,则不管是JTA,还是MSDTC,都可以基于同样的行为对该数据库进行事务处理。 

在JTA/XA中,主要有两个扩展点: 

(1) TransactionManager 
JTA事务管理器接口,实现该接口,即可完成对所有XA资源的事务调度,比如BEA的Tuxedo,JBossJTA等。 

(2) XAResource 
XA资源接口,实现该接口,即可被任意TransactionManager调度,比如:JDBC的XAConnection,JMS的XAMQ等。 

而Dubbo的远程服务,也应该是一个XAResource,比如:XAInvoker和XAExporter, 
Dubbo只需在第一次提交时,将请求发到服务提供方进行缓存和写盘, 
在第二次提交时,再基于缓存调用服务的Impl实现, 
当然一些健状性分支流程要考虑清楚。 

JTA/XA的基本原理如下: 

 

1. 用户启动一个事务: 
Java代码  收藏代码
  1. transactionManager.begin();   


2. 事务管理器在当前线程中初始化一个事务实例: 
Java代码  收藏代码
  1. threadLocal.set(new TransactionImpl());  


3. 用户调用JDBC或JMS或Dubbo请求,请求内部初始化一个XAResource实例: 
Java代码  收藏代码
  1. XAResource xaResource = new XAResourceImpl(); // 比如:XAConnection  


4. JDBC或JMS或Dubbo内部从当前线程获取事务: 
Java代码  收藏代码
  1. Transaction transaction = transactionManager.getTransaction(); // 其内部为:threadLocal.get();  


5. 将当前XAResource注册到事务中: 
Java代码  收藏代码
  1. transaction.enlistResource(xaResource);  


6. 用户提交一个事务: 
Java代码  收藏代码
  1. transactionManager.commit(); // 其内部为:getTransaction().commit();  


7. 事务for循环调用所有注册的XAResource的两阶段提交: 
Java代码  收藏代码
  1. Xid xid = new XidImpl();  
  2. for (XAResource xaResource: xaResources) {  
  3. xaResource.prepare(xid);  
  4. xaResource.commit(xid, true);  
  5. xaResource.commit(xid, false);  
  6. }  


8. 当然,还有一些异常流程,比如rollback和forget等。 

举例: 
Java代码  收藏代码
  1. TransactionManager transactionManager = ...; // 从JNDI进行lookup等方式获取  
  2. transactionManager.begin(); // 启动事务  
  3. try {  
  4.     jdbcConn.executeUpdate(sql); // 执行SQL语句,DB写入binlog,但不更新表  
  5.     jmsMQ.send(message); // 发送消息,MQ记录消息,但不进入队列  
  6.     dubboService.invoke(parameters); // 调用远程服务,Provider缓存请求信息,但不执行  
  7.     transactionManager.commit(); // 提交事务,数据库,消息队列,远程服务同时提交  
  8. catch(Throwable t) {  
  9.     transactionManager.rollback(); // 回滚事务,数据库,消息队列,远程服务同时回滚  
  10. }  
http://javatar.iteye.com/blog/981787
分享到:
评论
3 楼 wotier 2017-12-29  
还是要事务的
比如testSrvice.do这个接口的实现里调用
1、A.do();
2、B.do();
3、C.do();
abc三个do在不同的模块中,通过RPC接口调用,要么同时成功要么同时失败
2 楼 wq13480 2016-10-18  
1楼请滚开,做什么广告。
1 楼 呵呵6666 2016-10-13  
分享一篇基于开源的微支付系统进行实现的,Dubbo分布式事务解决方案博文
http://www.roncoo.com/article/detail/124243

文章将基于支付系统真实业务中的经典场景来对“可靠消息的最终一致性方案”、“TCC两阶段型方案”和“最大努力通知型方案”这3种柔性事务解决方案进行分析

相关推荐

    一个使用dubbo分布式事务开发的简易支付系统源码+项目说明.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,...一个使用dubbo分布式事务开发的简易支付系统源码+项目说明.zip

    基于SpringBoot和Seata实现Dubbo分布式事务管理系统源码+数据库+项目说明.zip

    基于SpringBoot和Seata实现Dubbo分布式事务管理系统源码+数据库+项目说明.zip 主要介绍SpringBoot2.1.5 + Dubbo 2.7.3 + Mybatis 3.4.2 + Nacos 1.1.3 +Seata 0.8.0整合来实现Dubbo分布式事务管理,使用Nacos 作为 ...

    基于SpringBoot+Zookeeper+Seata实现Dubbo分布式事务管理系统源码+超详细项目说明.7z

    基于SpringBoot+Zookeeper+Seata实现Dubbo分布式事务管理系统源码+超详细项目说明.7z SpringBoot2.1.5 + Dubbo 2.7.3 + Mybatis 3.4.2 + Zookeeper 3.4.14 +Seata 1.4.0整合来实现Dubbo分布式事务管理,使用...

    微服务架构的分布式事务解决方案(Dubbo分布式事务处理)

    分布式事务是一个绕不过去的...教程中的样例项目基于龙果学院开源的微支付系统进行实现,使用Dubbo作为服务化框架,教程中所实现的分布式事务解决方案在Java体系中的微服务架构系统都能通用,与具体的开发框架无关。

    基于SpringBoot+Zookeeper+Seata实现Dubbo分布式事务管理系统-源码

    本项目是基于SpringBoot、Zookeeper和Seata实现的Dubbo分布式事务管理系统,旨在提供一种高效、可靠的解决方案来处理分布式环境中的事务问题。以下将详细解释这个系统的核心组件及其工作原理。 1. **SpringBoot**:...

    基于SpringBoot和Seata实现Dubbo分布式事务管理系统-源码

    本项目是基于SpringBoot、Seata以及Dubbo构建的分布式事务管理系统,旨在解决微服务架构下的事务一致性问题。下面将详细介绍这三个核心组件及其在分布式事务中的作用。 首先,SpringBoot是一个快速开发框架,它简化...

    springboot + dubbo + LCN分布式事务 demo

    【标题】"springboot + dubbo + LCN分布式事务 demo"是一个综合性的项目实例,旨在展示如何在SpringBoot框架中整合Dubbo服务治理和LCN(Local Call Notification)分布式事务解决方案,以实现高可用、高性能的分布式...

    一个使用dubbo分布式事务开发的简易支付系统完整源码+说明.zip

    【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、...

    微服务架构的分布式事务解决方案+Dubbo分布式服务框架视频教程+redis+zookeeper+storm+mycat

    微服务架构的分布式事务解决方案 Dubbo分布式服务框架视频教程+redis+zookeeper+storm+mycat 资源为百度云连接+密码

    dubbo分布式tcc事务demo.zip

    【标题】"dubbo分布式TCC...这个dubbo分布式TCC事务demo是一个学习和实践分布式事务管理的宝贵资源,通过研究和运行其中的代码,开发者可以深入理解如何在实际项目中利用TCC模式来解决分布式环境中的事务一致性问题。

    spring集成dubbo分布式系统部署流程包含zookeeper redis nginx.docx

    Spring 集成 Dubbo 分布式系统部署流程包含 Zookeeper、Redis、Nginx Spring 集成 Dubbo 分布式系统部署流程是一种常见的微服务架构部署方法,该方法通过结合 Zookeeper、Redis、Nginx 等技术,可以实现高可用、高...

    dubbo分布式tcc事务demo

    【标题】"dubbo分布式TCC事务demo"是关于如何在分布式系统中使用TCC(Try-Confirm-Cancel)事务模式的一个示例项目。TCC事务模式是解决分布式环境中数据一致性问题的一种方法,尤其适用于微服务架构。在这个demo中,...

    dubbo的初级到高级,分布式系统架构视频

    ### Dubbo分布式系统架构视频知识点概述 #### 一、Dubbo简介与基本概念 - **Dubbo**是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:**面向接口的远程方法调用**、智能容错和负载均衡以及服务自动...

    xuyulong:一个使用dubbo分布式事务开发的简易支付系统

    "Xuyulong:一个使用Dubbo分布式事务开发的简易支付系统" 这个标题揭示了项目的核心特点。"Xuyulong"可能是项目开发者或团队的名字,而"Pay-dubbo"则可能是该项目的命名,它明确指出这是一个与支付相关的系统,并且是...

    基于dubbo的分布式事务实现demo源码.zip

    在"基于dubbo的分布式事务实现demo源码.zip"这个压缩包中,可能包含了上述一种或多种分布式事务的实现示例。`kotor-master`可能是一个项目仓库的名称,其中包含了具体的代码实现,包括服务提供者和服务消费者,以及...

    Dubbo分布式服务子系统的划分.pptx

    4. 尽量减少分布式事务:分布式事务处理复杂,容易成为系统的瓶颈。应优先考虑设计无状态的服务,或者使用补偿型事务、 Saga事务等策略来简化事务管理。 服务子系统的划分是一个持续优化的过程,需要根据业务的发展...

    Dubbo分布式服务管理

    【Dubbo分布式服务管理】 Dubbo,由阿里巴巴开源,是一款高性能、轻量级的Java RPC框架,它提供了三大核心功能:服务注册与发现、远程调用、负载均衡。Dubbo致力于打造一个完整的微服务生态,使得开发者可以方便地...

    基于Dubbo分布式超市进销存管理-源代码.rar

    本系统通过运用JAVA语言,使用SSM框架和Dubbo分布式来搭建。将超市商品信息存入Mysql数据库当中,通过系统来对数据库中的超市商品信息进行管理。便于超市更加高效的处理商品信息和库存管理等事务。 对应的设计文档...

    基于Java的分布式事务解决方案myth设计源码

    该项目是一个采用消息队列解决分布式事务的开源框架,基于Java语言开发(JDK1.8),并支持dubbo、springcloud、motan等RPC框架进行分布式事务处理。通过该项目,开发者可以学习并实践分布式事务的处理,为后续的...

Global site tag (gtag.js) - Google Analytics