1.分布式事务
分布式
跨库
2个@Transactional注解没有关系
分布式事务产生的背景:
1.在rpc通讯中,每个服务都有自己独立的数据源
,每个数据源都互不影响;。
2.在单个项目存在多个不同jdbc连接
(多数据源
)。
每个jdbc 连接都有自己独立的事务数据源,
强一致性:
强一致性:也就是我们的线程b读取到的结果一定是为mayikt而不是yusheng jun;
解决方案:要么数据库A
非常迅速
的速度将数据同步
给数据库B
,或者数据库A没有同步完成之前数据库B不能够读取userName
。。
弱一致性:
弱一致性:允许读取数据是为老的数据允许读取的结果不一致性。
最终一致性:
因为在分布式系统,数据的同步走网络通讯、多多少少可能会收到网络的延迟、抖动数据会.产生延迟,这是非常正常现象。。
所以呢,短暂的数据延迟是允许
的,但是最终结果一定要同步
。
1.往订单表中插入一-条数据
2.插入数据成功的话,发送派单消息
数据一致:
订单表有一条订单记录 并且 派单表有一条派单记录
订单表:
派单表:
如何基于我们的MQ解决我们的分布式事务的问题(最终一致性概念)
如何基于我们的MQ解决我们的分布式事务的问题(最终一致性概念)。
- 确保我们的
生产者往我们的MQ投递消息一定要成功
(生产消息确认confirm机制) 实
现重试。。
2.确保我们的消费者能够消费成功
(手动的ack机制)如果消费失败的情况下,MQ自
动帮消费者重试| - 确保我们的
生产者第一事务先执行成功
,如果执行失败采用补单队列
。
1.1生产者返出订单号
1.2生产者若失败,递归重试:
2.1消费者:
问题:
解决: