消息队列常见面试题:消息队列到底是推模式还是拉模式?

Java面试 潘老师 9小时前 1 ℃ (0) 扫码查看

各位小伙伴们,在面试中经常会被问到消息队列到底是推模式还是拉模式,如果没有研究过消息队列的底层原理,可能就不知道该如何回答了。其实这个问题要一分为二,从生产端到 broker 以及 broker 到消费端这两个路径来分析。

先说说生产端到 broker 这部分。业务端产生消息后,是通过推的模式传递给 broker 的。不管是 RabbitMQ、RocketMQ 还是 Kafka,都是这种推的模式。这样做的好处在于不用在生产端存消息,统一扔给 broker 处理。而且 broker 有持久化机制,相对来说丢消息的可能性很小。

再来讲讲 broker 到消费端。这个时候就有争议了,像 RocketMQ、Kafka 采用的是拉模式。而对于 RabbitMQ 则是推模式。推模式下,broker 有消息就直接往消费端推,消费者必须设置一个缓冲区来缓存这些消息。好处是消费者能直接从内存里取消息,实时性高延迟小。但不好的地方是缓冲区可能会溢出。所以 RabbitMQ 比较适合消息量不大、实时性要求高的场景。

对于 RocketMQ 和 Kafka,它们采用的拉模式,消费端主动请求 broker 来拉取消息。没有消息就在那等着,一直等到超时释放,这也叫长轮询。这种模式的好处是可以根据消费者自身情况主动请求,如果消费者觉得自己消费不过来,可以根据一定的策略停止拉取。好处是性能得以发挥,并发量更大,不好的地方就是有一定的时延。

好了,今天关于消息队列模式的内容就讲到这里,如果您对本期内容有任何疑问,欢迎在评论区给我留言。谢谢大家!


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

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

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