数据库与消息队列分布式事务设计

1. 本地消息事务表 + MQ回调线程补偿

在这里插入图片描述

  • ①prepare 准备阶段。本地客户端向DB、MQ发送prepare请求
  • ② ack 准备确认阶段。DB、MQ作为事务参与者返回本地客户端ack确认
  • ③commit/rollback 提交/回滚阶段。 根据事务参与者在准备确认阶段返回结果进行事务提交或回滚,此时一旦有事务参与者返回异常或超时未返回则进行回滚提交
  • ④callback 补偿回调阶段。当事务超时提交时,则由MQ进行回调查询数据库本地事务情况
  • ⑤commit/rollback 提交/回滚阶段。根据补偿回调阶段进行事务提交和回滚,实现分布式事务的最终一致性

2. 本地消息事务表 + 本地定时轮询补偿

在这里插入图片描述

  • ①commit DB事务提交阶段。本地客户端向DB进行事务提交,此时需要将业务数据和记录消息事务状态的信息表同时实现本地事务,此时标记消息事务状态为UN_SEND未发送或未完成状态,此时MQ未发送
  • ② ack DB确认阶段。返回DB事务提交成功或失败状态
  • ③commit MQ事务提交阶段。客户端发起MQ发送请求
  • ④update 本地事务表更新阶段。根据MQ发送结果进行本地消息事务表状态更新,成功则更新为SEND发送成功或发送完毕
  • ⑤MQ补偿 本地消息事务表定时轮询。对未发送成功消息事务进行补偿发送,实现分布式事务的最终一致
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大摩羯先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值