RocketMQ4.3.0开始支持事务消息
RocketMQ事务消息的实现原理基于两阶段提交和定时事务状态回查来决定消息最终是提交还是回滚。
事务消息整个流程:
- 发送方将半事务消息(prepare消息)发送到RocketMQ的Broker端。
- Broker将消息持久化成功后,返回ACK到发送方。
- 发送方执行本地事务。
- 发送方根据本地事务执行结果,向Broker提交二次确认Commit/Rollback。若Broker收到Commit则将半事务消息标记为可投递,订阅者就会收到消息;若Broker收到Rollback则删除半事务消息,订阅方将者不会收到消息;
- 若Broker出现异常未收到二次确认消息,会定时向发送方发起消息回查,发送方收到消息回查后检查本地事务执行结果,然后继续第4步流程。如果超过最大回查此时还未得到事务结果,Broker默认Rollback此消息。
图片来自:https://help.aliyun.com/document_detail/43348.html?spm=a2c4g.11186623.6.556.6ac52a2cpp0ruc
原理详情:https://blog.youkuaiyun.com/qq_32828253/article/details/110098041