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

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补偿 本地消息事务表定时轮询。对未发送成功消息事务进行补偿发送,实现分布式事务的最终一致
posted @ 2021-01-25 15:00  大摩羯先生  阅读(28)  评论(0编辑  收藏  举报