08_最大努力通知&事务消息&本地消息表三者区别是什么

gong_yz大约 2 分钟分布式事务

最大努力通知&事务消息&本地消息表三者区别是什么

最大努力通知、MQ事务消息以及本地消息表都是依赖MQ实现最终一致性的方案。其中本地消息表和MQ事务消息其实是可靠消息最终一致性的两种具体实现。

这三者中,方案最简单的肯定是最大努力通知,因为他不需要保证消费者一定能接收到,只是尽自己最人的努力去通知就行了。最多就是在发消息的地方加一个重试的机制。

但是这个方案缺点也很明显,那就是可能会导致消息的重复和丢失,这个比较容易理解。

虽然最大努力通知也是一种最终一致性的方案,但是他的一致性保障并没有那么强,所以他不适合用在一些一致性要求较高的场景。只适合用在消息丢了也无所谓的场景。比如说下单后邮件通知、开通后发送欢迎短信之类的业务场景。

MQ事务消息以及本地消息表这两个方案一致性要求更高一些,但是同样方案也要更复杂一些

MO事务消息的方案首先要求这个MQ是支持事务消息的,其次对业务代码有侵入性,因为本来只需要发一次消息,用了这个方案之后需要改成发送两个half消息,并且同时还得给MQ提供个反查的接口。

本地消息表这个方案对代码的侵入性没那么高,并且不需要MQ支持事务消息,但是他需要单独创建一张本地消息表,并且还需要提供一个定时任务来做轮询。所以他的改造成本也不低。

一般来说,事务消息和本地消息表比较适合于对一致性要求没那么高,不要求强一致,但是也不能丢的一些场景,比如用户下单后给用户增加积分。

一般来说,事务消息和本地消息表两个方案是可以互相替换的,用了事务消息的地方都可以换成本地消息表。但是实际来说,如果MO支持事务消息,那么可以考虑这个方案,如果公司使用的MQ不支持事务消息,那么就可以考虑本地消息表。

或者还有些场景有一些消息持久化、或者对账的需求,那么也建议使用本地消息表的方案。