我觉得事务的管理不应该属于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. 用户启动一个事务:
2. 事务管理器在当前线程中初始化一个事务实例:
3. 用户调用JDBC或JMS或Dubbo请求,请求内部初始化一个XAResource实例:
4. JDBC或JMS或Dubbo内部从当前线程获取事务:
5. 将当前XAResource注册到事务中:
6. 用户提交一个事务:
7. 事务for循环调用所有注册的XAResource的两阶段提交:
8. 当然,还有一些异常流程,比如rollback和forget等。
举例:
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. 用户启动一个事务:
- transactionManager.begin();
2. 事务管理器在当前线程中初始化一个事务实例:
- threadLocal.set(new TransactionImpl());
3. 用户调用JDBC或JMS或Dubbo请求,请求内部初始化一个XAResource实例:
- XAResource xaResource = new XAResourceImpl(); // 比如:XAConnection
4. JDBC或JMS或Dubbo内部从当前线程获取事务:
- Transaction transaction = transactionManager.getTransaction(); // 其内部为:threadLocal.get();
5. 将当前XAResource注册到事务中:
- transaction.enlistResource(xaResource);
6. 用户提交一个事务:
- transactionManager.commit(); // 其内部为:getTransaction().commit();
7. 事务for循环调用所有注册的XAResource的两阶段提交:
- Xid xid = new XidImpl();
- for (XAResource xaResource: xaResources) {
- xaResource.prepare(xid);
- xaResource.commit(xid, true);
- xaResource.commit(xid, false);
- }
8. 当然,还有一些异常流程,比如rollback和forget等。
举例:
- TransactionManager transactionManager = ...; // 从JNDI进行lookup等方式获取
- transactionManager.begin(); // 启动事务
- try {
- jdbcConn.executeUpdate(sql); // 执行SQL语句,DB写入binlog,但不更新表
- jmsMQ.send(message); // 发送消息,MQ记录消息,但不进入队列
- dubboService.invoke(parameters); // 调用远程服务,Provider缓存请求信息,但不执行
- transactionManager.commit(); // 提交事务,数据库,消息队列,远程服务同时提交
- } catch(Throwable t) {
- transactionManager.rollback(); // 回滚事务,数据库,消息队列,远程服务同时回滚
- }
相关推荐
微服务架构的分布式事务处理方案
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,...一个使用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 SpringBoot2.1.5 + Dubbo 2.7.3 + Mybatis 3.4.2 + Zookeeper 3.4.14 +Seata 1.4.0整合来实现Dubbo分布式事务管理,使用...
基于SpringBoot和Seata实现Dubbo分布式事务管理系统_源码
分布式事务是一个绕不过去的...教程中的样例项目基于龙果学院开源的微支付系统进行实现,使用Dubbo作为服务化框架,教程中所实现的分布式事务解决方案在Java体系中的微服务架构系统都能通用,与具体的开发框架无关。
基于SpringBoot+Zookeeper+Seata实现Dubbo分布式事务管理系统_源码
springboot + dubbo + LCN分布式事务 demo
dubbo分布式tcc事务demo.zip dubbo分布式tcc事务demo.zip
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、...
微服务架构的分布式事务解决方案 Dubbo分布式服务框架视频教程+redis+zookeeper+storm+mycat 资源为百度云连接+密码
Pay-dubbo 一个使用dubbo分布式事务开发的简易支付系统
基于支付系统真实业务中的经典场景demo,Dubbo、Spring、SpringMVC、ActiveMQ
基于dubbo的分布式事务实现demo源码.zip
本系统通过运用JAVA语言,使用SSM框架和Dubbo分布式来搭建。将超市商品信息存入Mysql数据库当中,通过系统来对数据库中的超市商品信息进行管理。便于超市更加高效的处理商品信息和库存管理等事务。 对应的设计文档...
dubbo项目基于atomikos的分布式事务管理 框架介绍 transactions-dubbo其实是对开源的分布式事务管理框架atomikos应用范围的一个扩展。atomikos本身支持使用两段提交协议在一个项目中,管理多个数据库事务,如...
教程中的样例项目基于龙果学院开源的微支付系统进行实现,使用Dubbo作为服务化框架,教程中所实现的分布式事务解决方案在Java体系中的微服务架构系统都能通用,与具体的开发框架无关。 教程样例项目中用到的技术及...
Transtraction注解事务。 MVC: 基于spring mvc注解,Rest风格Controller。Exception统一管理。 缓存和Session:注解redis缓存数据,Spring-session和redis实现分布式session同步,重启服务会话不丢失。 数据同步:...
分布式事务的处理视频教程,内容很详细,无需解压码,里面含相关的课件。若下载后发现有需额外的费用,欢迎举报!!!!
该项目是一个采用消息队列解决分布式事务的开源框架,基于Java语言开发(JDK1.8),并支持dubbo、springcloud、motan等RPC框架进行分布式事务处理。通过该项目,开发者可以学习并实践分布式事务的处理,为后续的...