java五种分布式事务_【JAVA】分布式事务

c63cadca7d58

微信图片_20201124114812.png

c63cadca7d58

微信图片_20201124114941.png

c63cadca7d58

微信图片_20201124115021.png

c63cadca7d58

微信图片_20201124115116.png

分布式事务的解决方案(介绍其中三种)

1.两阶段提交协议(2PC)

2.事务补偿(TCC)

3.消息队列实现最终一致

TCC (业务补偿和日志补偿)

业务补偿

try阶段预扣库存,commit阶段真正扣库存,cancel阶段恢复预扣的库存

日志补偿

先记日志,commit时删除日志,cancel时根据日志回滚

场景一:

库存数量与订单数量一致性,采用补偿型+最大努力通知型

1.先减库存,库存减成功后;

2.调用下单服务;

3.下单成功,两事务均提交完成;

4.下单失败,库存回滚,库存回滚失败,则放入消息服务(延时消息队列)分阶段定时重试,努力重试保证库存服务正常后成功回滚。

场景二:

订单信息、支付信息、充值信息三者之间的一致性,采用异步确保型的原因是,整个业务链路太长且跨不同的机房系统,网络延迟较高,业务方面恰好不需要非常高的实时性,所以采用小事务+异步通知,目前正常情况下用户从下单到完成支付到流量到账平均为1-5分钟左右:

1.下单成功即订单服务创建订单成功并发送支付请求到支付网关系统(订单状态-待支付,超过1小时未支付则流转为超时未付撤销,此处用到了RocketMQ的延时消费恰好实现定时器业务场景)。

2.返回支付页面,用户在支付交易系统完成支付业务流程,支付网关异步通知流量中心,流量中心接收到支付成功状态后修改订单状态-支付成功,并给支付网关返回成功结果。

3.流量中心修改完订单状态后,调用消息服务将直充业务放入消息队列,对直充业务进行解耦(原因是直充需要调用31省移动CRM系统,此链路过长,且部分省CRM系统耗时非常大,每个省的处理能力不同,经常出现20秒以上的超时,因此要考虑部分超时较高的省份拖垮系统,进行业务的削峰填谷);

4.当直充成功时,修改订单状态-已完成;

5.当直充失败时(移动特性,例如:直充时正好用户销户或者停机了),修改订单状态为待退款,并调用支付网关系统的退款接口,退款成功后支付网关异步通知流量中心,流量中心修改订单状态为-退款成功;

6.当直充超时时,调用定时任务服务进行超时重试机制(第一次重试在10分钟后执行、第二次在30分钟后、第三次…..),直到最大超时重试次数后还得不到直充结果,订单状态会卡在支付成功状态,依赖T+1对账稽核流程保证最终一致性,订单状态根据对账结果流转为:已完成或待退款–>退款成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中实现分布式事务可以使用一些常见的框架和技术来解决。一种常用的方式是使用分布式事务管理器,例如Atomikos和Bitronix。这些事务管理器可以协调多个分布式服务的事务,并确保它们的一致性。 在Java代码中实现分布式事务,一种常见的做法是使用分布式事务管理器和分布式消息队列。以下是一个简单的伪代码示例,展示了如何使用Atomikos事务管理器和RabbitMQ消息队列实现分布式事务: 1. 配置Atomikos事务管理器和RabbitMQ连接。 2. 在订单服务中,开启一个新的分布式事务。 3. 执行订单支付操作,并将支付结果发送到RabbitMQ消息队列。 4. 在库存服务中,监听RabbitMQ消息队列,并在接收到支付结果时执行库存减少操作。 5. 如果支付成功并且库存减少成功,提交分布式事务。 6. 如果支付失败或库存减少失败,回滚分布式事务。 这样,无论订单服务和库存服务分别运行在不同的系统中,它们可以通过Atomikos事务管理器和RabbitMQ消息队列来保证事务的一致性。 需要注意的是,实现分布式事务需要考虑到分布式系统的一致性和可靠性等问题。除了使用分布式事务管理器和消息队列,还可以考虑使用分布式锁、分布式缓存和分布式数据库等技术来解决分布式事务的实现和管理。 这只是一个简单的示例,实际实现分布式事务还需要考虑更多的细节和业务需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [CMS-订单系统的分布式事务如何处理](https://blog.csdn.net/weixin_42528266/article/details/103851475)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [java实现分布式事务](https://blog.csdn.net/weixin_44378050/article/details/108947627)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值