每天进步一点点【基于消息的最终一致性】

本文介绍了在高一致性需求场景下,如何利用消息中间件实现基于消息的最终一致性。核心流程包括在业务操作时记录待发送消息,通过定时任务轮询并投递消息到队列,以及下游系统对消息的重试消费,以保证上下游系统数据的一致性。然而,这种方案对应用的侵入性强,需要大量业务改造,成本较高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一些对数据一致性要求较高的场景中,经常采用基于消息的最终一致性方案,通过消息中间件来保证上、下游应用数据操作的一致性。

c6fd9519931686e4cbcf373128c9d305.png

主要流程如下:

(1)在执行业务操作时,记录一条消息数据到数据库(状态为“待发送”),并且消息数据的记录与业务数据的记录必须在数据库的同一个本地事务内完成(这是该方案的核心保障)。

(2)在消息数据记录完成后,通过一个定时任务轮训状态为“待发送”的消息,然后将待发送的消息投递给消息队列。

(3)如果在这个过程中消息投递失败,则启动重试机制,直到成功收到消息队列的ACK确认后,再将消息状态更新为“己发送”或者删除消息。

(4)如果下游系统消费消息失败,则不断重试,最终做到两个系统数据的最终一致性。上述流程保证了:只要订单创建成功,就一定会发送一条消息到MQ,下游的消息消费者就一定可以收到这条消息并完成业务处理,从而保证了上下游系统数据的一致性。

基于消息的最终一致性方案的主要的缺点是:对应用侵入性很强,应用需要进行大量的业务改造,成本较高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值