1. 首页 > 百货

RocketMQ事务消息解析!

单体架构下的事务

在单体系统的开发过程中,假如某个场景下需要对数据库的多张表进行操作,为了保证数据的一致性,一般会使用事务,将所有的操作全部提交或者在出错的时候全部回滚。

以创建订单为例,假设下单后需要做两个操作:

在单体架构下只需使用@Transactional开启事务,就可以保证数据的一致性。

@Transactionalpublic void order() {String orderId = UUID.randomUUID().toString();// 生成订单orderService.createOrder(orderId);// 增加积分creditService.addCredits(orderId);}

分布式架构下的事务

以下单流程为例,在分布式架构下的处理流程如下:

普通MQ消息存在的问题

@Transactionalpublic void order() {String orderId = UUID.randomUUID().toString();// 创建订单Order order = orderService.createOrder(orderDTO.getOrderId());// 发送订单创建的MQ消息sendOrderMessge(order);return;}

可以使用RocketMQ事务消息解决上述问题。

RocketMQ事务消息基础流程

基本流程

值得注意的是:

RocketMQ事务消息使用限制

RocketMQ事务消息基本原理

采用2PC两阶段设计。

源码解读

发送事务消息调用的是TransactionMQProducer的sendMessageInTransaction方法:

主要有以下几个步骤:

参考

《RocketMQ技术内幕》

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载者并注明出处:https://jmbhsh.com/baihuo725/33588.html

联系我们

QQ号:***

微信号:***

工作日:9:30-18:30,节假日休息