Skip to content

消息队列常见面试题 ​

  1. 消息队列的作用
  • 流量消峰 并发量大的时间,所有的请求直接怼到数据库,造成数据库连接异常,将请求写进消息队列,后面的系统再从消息队列依次来取出。
  • 异步 一些非必要的业务逻辑以同步的方式运行,太耗费时间。改成异步,可以提高系统的响应时间。
  • 解耦 将消息写入消息队列,需要消息的系统自己从消息队列中订阅。从而使该系统不需要改代码。
  1. 如何保证消息队列高可用 集群

  2. 如何保证消息不被重复消费 那造成重复消费的原因?,就是因为网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将消息分发给其他的消费者。 消费前做检测,比如写库成功的时候,写入到redis中,再次消费的时候如果redis已存在,则不进行消费

  3. 如何保证消费的可靠性传输? 其实这个可靠性传输,每种MQ都要从三个角度来分析:

    • 生产者弄丢数据

    从生产者弄丢数据这个角度来看,RabbitMQ提供transaction和confirm模式来确保生产者不丢消息

    • 消息队列弄丢数据

    处理消息队列丢数据的情况,一般是开启持久化磁盘的配置。这个持久化配置可以和confirm机制配合使用

    • 消费者弄丢数据

    消费者丢数据一般是因为采用了自动确认消息模式。这种模式下,消费者会自动确认收到信息。这时rabbitMQ会立即将消息删除,这种情况下,如果消费者出现异常而未能处理消息,就会丢失该消息。 手动确认消息

基于 VitePress 构建 · 欢迎 Star 与 PR