场景:
通过mq 进行分布式事务的一致性控制,参考转账事务原理
目的:
保持本地事务和mq发送的原子性
过程:
步骤1: 发送prepare消息到broker
步骤二 执行本地事务
步骤三:发送本地事务提交的结果,到broker中。broker根据提交的结果 对prepare中的消息决定提交还是回滚。
提交的处理------
1将prepare的消息从对应的top 转发到原top 客户进行消费.
2另外一份存储到 已处理topic
3prepare对应的消息会被删除。
回滚
和提交不同的是,参考上面步骤,没有步骤1
步骤四:对于因为网络 或客户端的问题,broker没有收到客户端的状态提交,会有定时任务进行查询补漏机制,
定时查询客户端执行的本地事务状态(TransactionListener check方法),进行对事务进行处理。
可能出现的问题
1执行本地事务 客户端宕机了,broker 服务器,
2没有接受到客户端发送的事务执行结果
3broker 宕机了。
以上几种场景通过check机制,进行事务的补偿
事务消息本质上属于saga 事务的一种。将一连串的大事务。分成几个独立的小事务。
适应场景 1必须支持幂等性 2场景的独立性
1性能高 2 业务改造成本低3 无法解决事务的隔离性
事务理论参考 本博客的分布式事务 https://www.jianshu.com/writer#/notebooks/40709597/notes/56179033
原文参考
如果感觉好辛苦您点个赞,谢谢
网友评论