简介
RocketMQ事务消息
RocketMQ在4.3.0版中支持分布式事务消息,这里RocketMQ的事务消息是采用2PC(两段式协议) +补偿机制(消息回查)的分布式事务功能。提供消息发送与业务落库的一致性。
RocketMQ事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布式事务功能,通过事务消息能达到分布式事务的最终一致。
RocketMQ的事务消息实现方式主要包括以下几个步骤:
1 生产者发送half消息到Broker。half消息在消费者看来是不可见的,这样可以避免消费者消费到事务未提交的数据,类似于数据库的隔离级别读已提交级别,避免脏读。
2.生产者创建订单,根据创建订单成功与否,向Broker发送commit或rollback。
3.生产者还可以提供Broker回调接口,当Broker发现一段时间half消息没有收到任何操作命令,会主动调用此接口来查询订单是否创建成功。
4.一旦half消息commit了,消费者库存系统就会来消费,如果消费成功,则消息销毁,分布式事务成功结束。
5.如果消费失败,则根据重试策略进行重试,最后还失败则进入死信队列,等待进一步处理。


实现原理
RocketMQ的事务消息实现原理基于两阶段提交协议(Two-Phase Commit Protocol),具体流程如下:
1.发送准备消息:当一个事务消息需要发送时,生产者会发送一个准备消息,该消息包含了实际的业务数据和事务的标识符。
2.执行本地事务:接收到准备消息后,生产者会执行一个本地事务,如果本地事务执行成功,则返回COMMIT状态,否则返回ROLLBACK状态。
3.提交或回滚本地事务:当生产者返回COMMIT状态时,代表本地事务已经执行成功,此时,RocketMQ会将消息标记为可提交状态,并发送一个commit消息给消费者;当生产者返回ROLLBACK状态时,代表本地事务执行失败,此时,RocketMQ会将消息标记为可回滚状态,并发送一个rollback消息给消费者。
4. 消费者处理消息:消费者在接收到commit或rollback消息后,会根据消息的状态来执行相应的操作。
5.提交或回滚事务:如果所有的消费者都接收到了commit消息,则代表该事务消息已经提交,此时生产者会提交本地事务,否则,如果有任何一个消费者接收到了rollback消息,则代表该事务消息已经回滚,生产者会回滚本地事务。
事务消息的实现原理基于两阶段提交协议,这是一种经典的分布式事务协议,可以保证数据的一致性和可靠性。RocketMQ通过实现TransactionListener接口来支持事务消息,同时也提供了许多配置选项和工具类来方便用

本文介绍了RocketMQ4.3.0版本中支持的分布式事务消息,基于2PC协议和补偿机制,通过TransactionListener接口实现。详细描述了从发送半消息、本地事务执行到消息处理的整个过程。
最低0.47元/天 解锁文章
4696

被折叠的 条评论
为什么被折叠?



