单体架构下的事务
在单体系统的开发过程中,假如某个场景下需要对数据库的多张表进行操作,为了保证数据的一致性,一般会使用事务,将所有的操作全部提交或者在出错的时候全部回滚。
以创建订单为例,假设下单后需要做两个操作:
在单体架构下只需使用@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