【原】JMS实现分布式事务一致性

  前言:关于分布式事务话题一直是颇有争议的话题,在这里通过自己对消息中间件实现分布式事务做一个简单的demo,同时也让自己能在实践中可以获取经验和对分布式事务自己的一些思考。

1.本地事务

传统的ssh,ssm,ssi这些java框架在配置好事务管理之后,我们的应用就能保证事务一致性;例如 在同一个数据库中A给B转账100元并发送100代金券,在这个过程中,不管是服务器挂掉还是转账失败抛出异常,最终都能保证A的钱要么转出去成功B收到100元和代金券,或者A和B都没有发生变化

   2.分布式事务

余额表和代金券表分布在不同的节点的数据库,转账和发放代金券是不同的应用,他们通过rpc,httpclient,mq实现消息对接;这时候A给B转账成功,但是发放代金券失败,我们应该如何处理呢?

   3.使用消息队列ActiveMq实现事务一致性

  • 实现流程是用户注册后发放代金券,在本文中 用户注册是一个应用,发放代金券是另外一个应用,它们之间是通过activemq实现消息收发,也就是用户注册成功后推送用户信息到消息中间件,在代金券应用中实现消息监听发放代金券。所以这里分为2个步骤去进行,在我们日常企业开发中,分布式开发都是把每个业务抽取出来作为一个单独的项目,这样某个项目挂掉后不会影响其他业务的正常进行。
  • 首先创建2个maven项目,分别叫account和voucher,在这里我用的是springmvc+jdbc作为项目骨架
  • 在account中我新建了一个UserController.java作为注册的入口,写好注册的方法,注册的方法如下图,其中注意的是增加了一张消息表,关于为什么需要消息表下面会详细解答。


  • 消息表主要用处是假如我们消息投递到 消息中间件后,消费者那边挂了,然后积压了一批待发送的代金券在那里,这时候我们肯定不能说不管了,需要的是在消费者重启后主动查询待发送表,如果状态是待发送的都通通发出去。
时间: 2024-10-13 12:41:17

【原】JMS实现分布式事务一致性的相关文章

明白了,原来分布式事务一致性可以这样搞

1.分布式事务问题的产生 何为事务? 所谓事务,大多数开发人员对事务并不陌生,它是由中间件提供的一种特有的机制.这种机制可以将一个活动所涉及的全部操作当做一个不可分割的执行单元,只有这个执行单元的所有操作均能正常执行的情况下才提交事物:否则,只要其中任一一个操作执行失败,都将导致整个执行单元回滚.现在的关系型数据库.部分消息中间件都具备这样的事务处理能力. 事务特性有哪些? Atomicity--原子性,是说事务中的所有操作的结果,要么全部成功,要么全部失败,不会存在中间状态.事务在执行过程中如

分布式事务一致性解决方案分析

一.从数据一致性谈起 一致性问题,"万恶之源"是数据冗余和分布并通过网络交互+网络异常是常态. 1.数据一致性的情形 主库.从库和缓存数据一致性,相同数据冗余,关系数据库,为保证关据库的高可用和高性能,一般会采用主从(备)架构并引入缓存.其中数据不一致性存在于数据冗余的时间窗口内.常用的解决方案见数据库之架构. 多副本数据之间的数据一致性,相同数据副本,大数据领域,一份数据会有多个副本并存储到不同的节点上.客户端可以访问任何一个节点进行读写操作.常用的解决方案是基于Paxos.ZAB.

三:分布式事务一致性协议2pc和3pc

一:分布式一致性协议--->对于一个分布式系统进行架构设计的过程中,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是就产生了一系列的一致性协议.--->长期探索涌现出一大批经典的一致性协议和算法.其中最著名的就是二阶段提交协议,三阶段提交协议和paxos算法. 二:2PC与3PC--->在分布式系统中,每一个机器节点虽然都能够明确知道自己在进行事务操作过程中的结果是成功或失败,但却无法直接获取到其他分布式节点的操作结果.因此,当一个事务操作需要跨越多个分布式节点的时候,为了保持事

六:分布式事务一致性协议paxos的分析

最近研究paxos算法,看了许多相关的文章,概念还是很模糊,觉得还是没有掌握paxos算法的精髓,所以花了3天时间分析了libpaxos3的所有代码,此代码可以从https://bitbucket.org/sciascid/libpaxos 下载.对paxos算法有初步了解之后,再看此文的效果会更好:如果你也想分析libpaxos3的话,此文应该会对你有不小帮助:关于paxos的历史这里不多做介绍,关于描述paxos算法写的最好的一篇文章应该就是维基百科了,地址戳这里:http://zh.wik

分布式事务一致性方案

http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency 在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的Bob给Smith转账的案例.传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库.我们通常只需借助开发平台中特有数据访问技术和框架(例如Spring.JDBC.ADO.NET),结合关系型数据库自带的事务管理机制来实现事务性

五:分布式事务一致性协议paxos的应用场景

1.应用场景 (1)分布式中的一致性 Paxos算法主要是解决一致性问题,关于“一致性”,在不同的场景有不同的解释: NoSQL领域:一致性更强调“能读到新写入的”,就是读写一致性数据库领域:一致性强调“所有的数据状态一致”,经过一个事务后,如果事务成功,所有的表数据都按照事务中的SQL进行了操作,该修改的修改,该增加的增加,该删除的删除,不能该修改的修改了,该删除的没删掉:如果事务失败,所有的数据还是在初始状态:状态机:在状态机中的一致性更强调在每个初始状态一致的状态机上执行一串命令后状态都必

四,分布式事务一致性协议paxos通俗理解

转载地址:http://www.lxway.com/4618606.htm 维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法. Paxos算法目前在Google的Chubby.MegaStore. Spanner等系统中得到了应用,Hadoop中的ZooKeeper也使用了Paxos算法,在上面的各个系统中,使用的算法与Lamport提出的 原

分布式事务一致性,事务补偿实战

一.事务记录补偿表设计 三.业务补偿函数 @Override public void compensation(BidPaymentDetailConfirmRecord confirmRecord, ProviderUserSession userSession) throws Exception { Long type = confirmRecord.getBusinessType(); Long detailId = confirmRecord.getPaymentDetailId();

解决业务代码里的分布式事务一致性问题

参考1:https://zhuanlan.zhihu.com/p/25346771 参考2:介绍ACID,CAP,BASE解决一致性的问题文章 http://www.10tiao.com/html/219/201703/2659599109/1.html