Rocket MQ对事务消息的支持最好,Apache RocketMQ在4.3.0之后开始支持事务消息。才有2PC的思想来实现提交事务消息。同时增加了一个补偿逻辑来处理两阶段超时或者失败的消息。
Rocket事务消息主要分为两个阶段: 正常事务的发布和提交、事务消息的补偿。
1.生产者发送半消息给MQ-Server(半消息指消费者暂时不能消费的消息)
2.服务端响应消息写入结果,半消息发送成功。
3.开始执行本地事务。
4.根据本地事务执行状态 commit或者rollback操作
事务消息的补偿流程:
1.MQ Server长时间没收到本地事务的执行结果会像生产者发起一个确认回查的操作请求。
2.生产者收到确认回查请求后,检查本地事务的执行状态。
3根据检查后结果,执行commit或者rollback。 补偿阶段主要用于解决生产者执行commit或者rollback时候发生超时或者报错的情况。