消息队列_业务_分布式事务
文章目录
基础回顾
事务的特性
事务的特性: acid, 原子性,一致性,隔离性,持久性
rabbitMQ分布式事务
两阶段提交原理
1、rocketmq实现分布式事务,使用的是两阶段提交,和mysql写redo log和binlog日志的两阶段提交类似,以上面订单的为例,提交订单消息到mq中,等待mq回复ack,消息提交成功,但是此时的消息对消费组不可见,即half消息,此阶段像mysql的引擎层写redo log的prepare阶段,执行本地事务,执行本地事务成功,此阶段像mysql的service层写binlog的
-
消费端做幂等处理来保障消息不会重复消费:
-
可以采用状态机的方式。
-
消息数据唯一键+redis setnx来保障。
-
本地消息表,要确保插入本地消息表和执行消息消费业务在同一事务里。
-
在实际应用中,比较常见的分布式事务实现有 2PC(Two-phase Commit,也叫二阶段提交)、TCC(Try-Confirm-Cancel) 和事务消息。每一种实现都有其特定的使用场景,也有各自的问题,都不是完美的解决方案。
rocketMq 参考文档
文章作者 LYR
上次更新 2021-08-17