消息队列常见面试题:关于消息队列事务的一些问题解答

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

上一期我们聊到了消息队列的事务功能,在分布式业务中,它能保证数据的一致性。比如下单送积分,通过消息队列的事务就能确保下单和送积分这两个业务要么全部成功,要么全部失败。很多同学在评论区提了一些很有代表性的问题,本期就来给大家解答一下。

第一个问题,有同学问事务中由消息队列发出的隐藏消息到底是什么意思。其实很多消息队列里,这个概念又叫做半消息。就是说消息只执行了一半的功能,从生产端到了消息队列的 broker 时,它并不是一个正常的消息,只是存在日志中的一条记录,在日志里这又叫做 commit log 。等生产端的业务执行成功之后,再从这个 commit log 里把相关的日志记录捞出来,所谓的隐藏消息或者半消息就会转成正常消息,再由 broker 转到消费端进行消费。现在基本上三大消息队列,像 rabbitmq、rocketmq、kafka 都支持了事务功能,不过具体的实现方式不太一样,需要大家自行去了解。

第二个问题,有同学问如果消费端消费失败,生产端怎么回滚。这是个很不错的问题。实际上,消息队列的事务只能保证在主体业务全部成功的情况下,消息能从生产端成功发送到消息队列的 broker 。所以如果消费端失败了,事务是回滚不了的,它只能保证消息在生产阶段能够准确无误地传送到 broker ,消费阶段无法保证。

第三个问题,有同学问这是不是 tcc 。其实这确实很像,应该也属于分布式事务的一个核心逻辑,比如先尝试发送半消息,如果业务主体有失败,那么就全部回滚,如果全部成功,就提交事务,把半消息转成正常消息发送到消费端去完成消费。大致就是这么一个逻辑,所以它跟 tcc 还是很像的。

好了,以上就是针对上一期消息队列事务的一些问题的解答,如果您对消息队列事务还有其他疑问,欢迎在评论区给我留言。


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

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

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