RocketMQ事务信息解析!
发布时间:2024-11-15 04:37:27点击:
单体架构下的事务
在单体系统的开发环节中,假设某个场景下须要对数据库的多张表启动操作,为了保证数据的分歧性,普通会经常使用事务,将一切的操作所有提交或许在出错的时刻所有回滚。
以创立订单为例,假定下单后须要做两个操作:
在单体架构下只要经常使用@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技术内情》