上一篇 <<<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基础知识
<<<Rabbitmq示例之点对点简单队列
<<<Rabbitmq示例之工作(公平)队列
<<<Rabbitmq示例之发布订阅模式
<<<Rabbitmq示例之路由模式Routing
<<<Rabbitmq示例之通配符模式Topics
<<<Rabbitmq示例之RPC模式
<<<Rabbitmq队列模式总结
<<<Rabbitmq如何保证消息不丢失
<<<Springboot利用AmqpTemplate整合Rabbitmq
<<<Rabbitmq如何保证幂等性
<<<Rabbitmq的重试策略
<<<Rabbitmq通过死信队列实现过期监听
<<<Rabbitmq解决分布式事务demo
<<<Rabbitmq环境安装
<<<Kafka中的专业术语都有哪些
<<<Kafka的设计原理介绍
<<<Kafka集群如何实现相互感知
<<<Kafka如何实现分区及指定分区消费
<<<Kafka如何保证消息顺序消费
<<<Kafka如何保证高吞吐量
<<<Kafka集群环境搭建
<<<RocketMQ架构原理
<<<RocketMQ、RabbitMQ和Kafka的对比
<<<SpringBoot整合RocketMQ示例
<<<RocketMQ保证顺序消费demo
<<<RocketMQ如何动态扩容和缩容
<<<RocketMQ如何解决分布式事务
<<<RocketMQ单机版本安装
<<<RocketMQ集群环境程序启用相关知识点
<<<RocketMQ单机做主备实操
<<<RocketMQ所有配置说明