消息队列常见面试题:如何用消息队列中的事务消息,保证数据的一致性

面试题 潘老师 10个月前 (06-16) 51 ℃ (0) 扫码查看

大家好!今天咱们来聊聊消息队列中的事务消息,以及它是如何保证数据一致性的。

事务这个词,做后端的同学应该都不陌生,只要涉及到业务,都会和事务有所接触。事务就是为了解决一致性问题的,要么全部成功,要么全部失败。数据库有数据库的事务,分布式也有分布式的事务。同样,在消息队列中也提供了事务功能,目的也是为了保证数据的一致性。

咱们举个常见的例子,用户付款,订单系统创建订单,然后发送消息给积分系统,给用户加上对应的积分。这时候,如果订单创建成功,但消息没有成功发送出去,积分中心接收不到消息,无法给下单的用户增加相应的积分,这就导致了数据不一致的情况。

而如果引入了消息队列的事务,就可以轻松解决这个问题。其实现原理很简单,在下单的业务逻辑之前,先发送一条事务消息。但这个消息是隐形的,是一种特殊的队列。等到发送成功之后,就会通知生产端可以开始下单的业务了。这个时候,如果下单逻辑失败,隐形消息就会被删除。如果下单成功,就会通知消息队列将隐形的消息队列转成普通消息,再发给消费端完成消费。

这样处理的核心逻辑就是先让消息发送出去,再等待主体业务的执行。如果失败了就全部回滚,消息也不会丢失,因为在主体业务开始之前,消息已经发送


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/ms/13053.html
喜欢 (1)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】