RocketMQ事务消息的理解
1.简述:
保证本地事务和发送消息的一致性,不保证后续消费者的一致性。
2.原理:
事务消息采用2PC+事务补偿机制来保证一致性
-
2PC:提交回滚事务消息
-
事务补偿机制:处理二阶段超时或者失败的消息,利用了事务回查来检查本地事务的状态,从而判断事务消息是提交还是回滚。
3.事务消息的流程概要
-
提交回滚事务消息
1.发送half消息
2.half消息回传ack
3.MQ Server将消息持久化
4.执行本地事务,根据本地事务的执行成功与否来决定事务消息的状态(commit、rollback、unkown)
如果事务消息的状态为commit则让消费者消费消息。rollback则直接丢弃消息。unkown则进入事务补偿
-
事务补偿
1.对于没有commit/rollback的消息,MQ Server会向producer发起事务回查请求。默认查询次数:15
2.producer收到回查请求,检查回查消息对应的状态
3.根据回查消息状态来重新commit/rollback
4.事务消息的特点
-
事务消息在一阶段对用户不可见
half消息属于一阶段消息,对用户不可见。它会备份原消息的Topic、Queue,改变主题为RMQ_SYS_TRANS_HALF_TOPIC(对外不可见)。RocketMQ会开启一个定时任务,从该Topic中拉取消息进行消费,向producer发送事务回查请求,根据查询到的事务状态来决定是提交还是回滚消息
-
Commit和Rollback操作以及Op消息的引入
待整理