1
行业背景
2
RocketMQ 在陪伴体系中的应用
1. 陪伴场景概述
2. RocketMQ 解耦异构系统
3. Topic 和 Tags 最佳实践
3
RocketMQ 事务消息的金融应用场景
1. 金融场景概述
2. 领域事件理论模型
3. 分布式事务方案对比
第一种方案:最常见普通消息+异步对账,这个方案的问题是无法保证主事务的执行和入队同时成功,需要时效性低的对账补偿解决,一致性只是较高。 第二种方案:本地消息表,对比上一种做法,它由业务将写入消息表放到主事务中,把主事务和入队变成一个原子操作,然后业务读取入队记录,自己投递给从事务。它的缺点是主事务和消息表在存储上是耦合的,没有解耦度。 第三种方案:引入 XA 事务,是个两阶段提交的协议,实现难度较大。而且面临两个问题:一是这是一种同步阻塞协议,有锁占用导致并发不会太高,另外就是 XA 事务过程中,在参与者投赞成票后,如果协调者发生故障,节点不清楚应该提交还是中止,只能等待协调者恢复。这时候可能会出现业务中断。 第四种方案:TCC,专门处理分布式事务的 TCC,只侧重于一致性,无解耦度,也是不可行。 第五种方案:事务消息,它能同时兼顾解耦度和一致性,是最合适的模式。
4. RocketMQ 事务消息核心流程
第一阶段:Prepare 阶段 ,即业务系统将 RocketMQ 的半事务消息发送到事务中心,事务中心不做发布,等待二次确认。这个阶段 RocketMQ 的半消息在消费者端是感知不到的。 第二阶段:业务系统执行主事务,即购买货币基金。 第三阶段:主事务成功后 commit 到事务中心,由事务中心投递消息到从事务。如果主事务失败,就投递 rollback 给事务中心。这里需要两阶段提交的原因是:普通的入队操作无论放在主事务之前还是之后都无法保证最终一致。如果先执行主事务,再入队,那么可能在入队前,业务会宕机,就没有机会再入队了。如果先入队再执行主事务,那么可能主事务没有执行成功,但是从事务执行成功了,业务逻辑就会发生错乱。
5. RocketMQ 如何保证事务消息在消费端正常消费
6. 事务消息的适用场景
4
未来规划
5
加入 Apache RocketMQ 社区
文章转载自RocketMQ官微,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。