基础回顾

事务的特性

事务的特性: acid, 原子性,一致性,隔离性,持久性

rabbitMQ分布式事务

两阶段提交原理

1、rocketmq实现分布式事务,使用的是两阶段提交,和mysql写redo log和binlog日志的两阶段提交类似,以上面订单的为例,提交订单消息到mq中,等待mq回复ack,消息提交成功,但是此时的消息对消费组不可见,即half消息,此阶段像mysql的引擎层写redo log的prepare阶段,执行本地事务,执行本地事务成功,此阶段像mysql的service层写binlog的

  1. 消费端做幂等处理来保障消息不会重复消费:

    • 可以采用状态机的方式。

    • 消息数据唯一键+redis setnx来保障。

    • 本地消息表,要确保插入本地消息表和执行消息消费业务在同一事务里。

image-20210819161226191

在实际应用中,比较常见的分布式事务实现有 2PC(Two-phase Commit,也叫二阶段提交)、TCC(Try-Confirm-Cancel) 和事务消息。每一种实现都有其特定的使用场景,也有各自的问题,都不是完美的解决方案。

rocketMq 参考文档

rocketMQ参考文档