奈学公开课RocketMq学习笔记二

一 序

   本文属于奈学教育rocketmq学习笔记。主讲老师陈东。

这节课听了半截,后来的pdf也找不到了。

业务场景

1、用户下单
1)创建订单+减库存

2、发布或更新商品信息
1)写商品库+更新外置索引

二 事务消息实现原理

2.1分布式事务

1、强一致
1)一致性协议
2、两阶段提交2PC

3、三阶段提交3PC

4、落地方案 => XA规范
1)资源管理器=> 事务参与者
2)事务管理器=> 事务协调者

5、柔性事务
1)最终一致性方案
2)TCC(Try-Confirm-Cancel)

3)SAGA 模型
a:一个分布式事务拆分为多个本地事务
b:本地事务都有相应的执行模块和补偿模块
c:事务管理器负责在事务失败时调度执行补偿逻辑

上面的网上很多文章,就不展开了。

6、事务消息
1)简化了分布式事务模型
2)对业务友好

相当于=RPC+事务消息

三 事务消息机制

两阶段提交
a: 发送半消息
b:执行本地事务
c:发送Commit/Rollback
d:提供回查接口

在这里插入图片描述

四、事务消息原理

1、半消息主题
1)HALF 消息:RMQ_SYS_TRANS_HALF_TOPIC(临时存放消息信息)
a: 事务消息替换主题,保存原主题和队列信息
b:半消息对Consumer不可见,不会被投递

2)OP 消息:RMQ_SYS_TRANS_OP_HALF_TOPIC(记录二阶段操作)
a:Rollback:只做记录
b:Commit:根据备份信息重新构造消息并投递

3)回查
a:对比HALF消息和OP消息进行回查
在这里插入图片描述

RocketMq事务消息是保证事务的最终一致性,从上面的介绍可以看到,半消息标记为“暂时不能投递”的状态,是特殊的队列。

消息回查,由于某些特殊原因,如网络抖动,生产者应用重启,可能导致某条消息的二次确认丢失,而broker会不定时的扫描某条长期处于半消息状态的消息,此时会主动向生产者发送询问该条消息的最终状态,(commit或者rollBack),即对该消息进行回查,这个是broker自动为我们做的,默认时间间隔是1分钟。

4) 缺点
需要业务方提供回查接口,对业务侵入较大。

这里老师讲了一个实现方式:

1)通过客户端实现
2)事务消息表记录发消息事件
3)本地事务保证业务数据与写消息表原子性
4)事务管理器维护事务消息表

扫库发送、清理。

猜你喜欢

转载自blog.csdn.net/bohu83/article/details/106886243