分布式事务的四种解决方案——本地消息表(异步确保)

本文介绍了分布式事务中的一种解决方案——本地消息表,通过结合消息队列(如Kafka)实现事务的最终一致性。本地消息表先在业务数据表和本地消息表中使用本地事务确保一致性,然后将消息发送到消息队列,通过定时任务监控未成功发送的消息,保证100%投递。同时讨论了两种不同的消息补偿机制,一种涉及三次DB操作,另一种优化为两次,以适应不同的并发需求和可靠性要求。
摘要由CSDN通过智能技术生成

本地消息表与业务数据表处于同一个数据库中,这样就能利用本地事务来保证在对这两个表的操作满足事务特性,并且使用了消息队列来保证最终一致性。

  1. 在分布式事务操作的一方完成写业务数据的操作之后向本地消息表发送一个消息,本地事务能保证这个消息一定会被写入本地消息表中。
  2. 之后将本地消息表中的消息转发到 Kafka 等消息队列中,如果转发成功则将消息从本地消息表中删除,否则继续重新转发。
  3. 在分布式事务操作的另一方从消息队列中读取一个消息,并执行消息中的操作。

在这里插入图片描述
如上图示:
message有以下4种状态
status 0:初始状态
status 1:publisher收到broker 确认消息后的状态
status 2:消息被consumer成功消费后的状态
status 3:异常状态,需人工跟进处理

步骤如下:
step 1:message 入库(存进db),初始 status 为 0
step 2:publisher发送message到 broker
step 3:broker收到消息后返回 确认消息 给publisher
step 4:publisher收到确认消息后,更新 message

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值