86.基于RabbitMQ最新解决分布式事务方案

1.分布式事务

86.基于RabbitMQ最新解决分布式事务方案_第1张图片
86.基于RabbitMQ最新解决分布式事务方案_第2张图片
86.基于RabbitMQ最新解决分布式事务方案_第3张图片
分布式
跨库
2个@Transactional注解没有关系

分布式事务产生的背景:

1.在rpc通讯中,每个服务都有自己独立的数据源,每个数据源都互不影响;。
2.在单个项目存在多个不同jdbc连接(多数据源)。
每个jdbc 连接都有自己独立的事务数据源,

86.基于RabbitMQ最新解决分布式事务方案_第4张图片

强一致性:

强一致性:也就是我们的线程b读取到的结果一定是为mayikt而不是yusheng jun;
解决方案:要么数据库A非常迅速的速度将数据同步给数据库B,或者数据库A没有同步完成之前数据库B不能够读取userName。。

弱一致性:

弱一致性:允许读取数据是为老的数据允许读取的结果不一致性。

最终一致性:

因为在分布式系统,数据的同步走网络通讯、多多少少可能会收到网络的延迟、抖动数据会.产生延迟,这是非常正常现象。。
所以呢,短暂的数据延迟是允许的,但是最终结果一定要同步

86.基于RabbitMQ最新解决分布式事务方案_第5张图片
1.往订单表中插入一-条数据
2.插入数据成功的话,发送派单消息

数据一致:
订单表有一条订单记录 并且 派单表有一条派单记录

86.基于RabbitMQ最新解决分布式事务方案_第6张图片

订单表:

86.基于RabbitMQ最新解决分布式事务方案_第7张图片

派单表:

86.基于RabbitMQ最新解决分布式事务方案_第8张图片
86.基于RabbitMQ最新解决分布式事务方案_第9张图片

如何基于我们的MQ解决我们的分布式事务的问题(最终一致性概念)

如何基于我们的MQ解决我们的分布式事务的问题(最终一致性概念)。

  1. 确保我们的生产者往我们的MQ投递消息一定要成功(生产消息确认confirm机制) 实
    现重试。。
    2.确保我们的消费者能够消费成功(手动的ack机制)如果消费失败的情况下,MQ自
    动帮消费者重试|
  2. 确保我们的生产者第一事务先执行成功,如果执行失败采用补单队列
    86.基于RabbitMQ最新解决分布式事务方案_第10张图片

1.1生产者返出订单号

86.基于RabbitMQ最新解决分布式事务方案_第11张图片

1.2生产者若失败,递归重试:

86.基于RabbitMQ最新解决分布式事务方案_第12张图片

2.1消费者:

86.基于RabbitMQ最新解决分布式事务方案_第13张图片

问题:

在这里插入图片描述

解决:

86.基于RabbitMQ最新解决分布式事务方案_第14张图片
86.基于RabbitMQ最新解决分布式事务方案_第15张图片
在这里插入图片描述

你可能感兴趣的:(6期)