使用RabbitMQ实现分布式事务
2024-09-01 14:11:23
RabbitMQ解决分布式事务思路:
案例: 经典案例,以目前流行点外卖的案例,用户下单后,调用订单服务,让后订单服务调用派单系统通知送外卖人员送单,这时候订单系统与派单系统采用MQ异步通讯。
RabbitMQ解决分布式事务原理:采用最终一致性原理。
需要保证以下三要素
1、确认生产者一定要将数据投递到MQ服务器中(采用MQ消息确认机制)
2、MQ消费者消息能够正确消费消息,采用手动ACK模式(注意重试幂等性问题)
3、如何保证第一个事务先执行,采用补偿机制,在创建一个补单消费者进行监听,如果订单没有创建成功,进行补单。
如果生产者投递消息到MQ服务器成功
场景1:如果消费者消费消息失败了,生产者是不需要回滚事务的。
解决方案:消费者采用手动ack应答模式,采用MQ进行补偿重试机制,注意MQ补偿幂等性问题。
问题:如何确保生产者投递消息到MQ服务器一定能成功?
解决方案:confirm机制(确认应答机制)。
场景2 如果生产者投递消息到MQ服务器失败,如何解决?
解决方案:使用生产者重试机制进行发消息,注意幂等性问题。
场景3 如何保证一个事务先执行,生产者投递消息到MQ服务器成功,消费者消费成功了,但是订单却回滚了。
解决方案:补单机制。
传统解决方式:
RabbitMq解决方案:
最新文章
- HDU 5120 A Curious Matt(2014北京赛区现场赛A题 简单模拟)
- (转)使用myeclipse生成实体类和hibernate映射文件
- solr与.net系列课程(一)solr的安装与配置
- Unity2.0容器自动注册机制
- (笔记)angular material radio用法
- MFC程序实现窗口分割,视图快捷插入控件和插入列表
- Linux C 程序 空语句-gcc编译命令(SIX)
- Android SimpleAdapter源码详解
- redis持久化和常见故障
- STL中istream_iterator和ostream_iterator的基本用法
- synapse socket总结三:心跳(Heartbeat)
- 2D游戏开发(2)
- 【ECHART】实例
- ResNet
- JVM 性能调优监控工具
- 一道php笔试题
- 使用IntelliJ IDEA 配置Maven(转)
- Info - 信息获取途径汇总
- PHP获取文件大小的方法详解
- chromium ②
热门文章
- Win10系统安装VMware-viclient-6.0无响应问题解决方法
- 【边缘计算】 Edge Computing: Vision and Challenges
- Jupyter Notebook 远程连接配置(转载)
- ASP如何将table导出EXCEL表格
- MauiMETA工具的使用(一)
- QML访问C++类内部
- python学习:python的常用功能示例2
- (十二)会话跟踪技术之servlet通信(forward和include)
- mysql创建数据库、表、写数据
- Nginx+keepalived 高可用双机热备(主从模式/双主模式)