一、背景
在微服务架构中,我们常常使用异步化的手段来提升系统的 吞吐量 和 解耦 上下游,而构建异步架构最常用的手段就是使用 消息队列(MQ) ,那异步架构怎样才能实现数据一致性呢?本文主要介绍如何使用 RocketMQ 的 事务消息 来解决一致性问题。
RocketMQ是阿里巴巴开源的分布式消息中间件,目前已成为 Apache 的顶级项目。历经多次天猫双十一海量消息考验,具有高性能、低延时和高可靠等特性
PS:同步场景怎样保证一致性?请看文章《 Spring Cloud同步场景分布式事务怎样做?试试Seata 》
二、MQ选型
可以看到在 业务处理 方面来说 RocketMQ 优于其他对手,而且原生支持 事务消息
PS:业务系统用的是其他 MQ 产品但是又需要 事务消息 怎么办?学习原理自己开发实现!
三、什么是事务消息
例如下图的场景:生成订单记录 -> MQ -> 增加积分
我们是应该先 创建订单记录 ,还是先 发送MQ消息 呢?
- 先发送MQ消息:这个明显是不行的,因为如果消息发送成功,而订单创建失败的话是没办法把消息收回来的
- 先创建订单记录:如果订单创建成功后MQ消息发送失败 抛出异常 ,因为两个操作都在本地事务中所以订单