Rabbitmq解决分布式事务思路

上一篇 << 下一篇 >>>Rabbitmq解决分布式事务demo


1.分布式事务产生的背景

a、在rpc通讯中,每个服务都有自己独立的数据源,每个数据源的事务互不影响
b、在单个项目中存在多个不同的jdbc链接(多数据源)—可以使用Jta+Atomikos解决

2.一致性的类型

强一致性:
a、要么数据库A非常迅速的将数据同步给数据库B
b、数据库A没同步给数据库B的时候不能读取

弱一致性:
允许读取的结果不一致

最终一致性:
短暂的数据延迟是允许的,但是最终结果一定要同步

3.解决分布式事务的核心思路【采用最终一致性的方案】

在分布式系统不可能有强一致性的问题,因为网络抖动等原因,短暂数据延迟是正常的,但是最终的结果一定要是同步的。

步骤:
1.确认我们的生产者消息一定要投递到MQ中, 投递失败 就继续重试(消息确认机制)
2.消费者采用手动ack的形式确认实现消费 (注意幂等性问题)
3.保证我们的生产者投递订单事务先执行,投递消息之后发生了回滚 可以采用补单队列。

4.Rabbitmq解决分布式事务存在的bug

如果补单队列也挂的情况下,订单数据可能会丢失,但是能够成功派单,只能手动补偿。


推荐阅读:
<<<消息中间件的核心思想
<<<消息中间件常见问题汇总
<<<基于Netty简单手写消息中间件思路
<<<消息队列常用名词与中间件对比
<< << << << << << << << << << << << << << << << << << << << << << << << << << << << << << << <<

你可能感兴趣的:(Rabbitmq解决分布式事务思路)