跳至主要內容

RabbitMQ 面试

钝悟...大约 2 分钟分布式分布式通信MQ分布式通信MQRabbitMQ面试

RabbitMQ 面试

【中等】RabbitMQ 怎么实现延迟队列?🌟

RabbitMQ 实现延迟队列主要有两种方式:

死信交换机(DLX)方案

  • 原理:让消息先进入一个有过期时间(TTL) 的队列,消息过期后自动被转发到死信交换机,再路由到最终消费队列。
  • 优点:稳定可靠,无需额外插件。
  • 缺点不灵活,需为不同延迟时间创建多个队列;定时不精确

官方延迟插件方案(推荐)

  • 原理:安装 rabbitmq_delayed_message_exchange 插件,使用一种特殊的交换机。发送消息时通过 x-delay 参数为每条消息单独设置延迟时间
  • 优点极其灵活,使用简单,延迟精度更高。
  • 缺点:需安装插件;海量延迟消息可能对性能有压力。

选择建议

  • 只需少数固定延迟时间 → 死信交换机方案
  • 需要灵活指定每条消息的延迟 → 官方延迟插件方案(首选)。

【中等】RabbitMQ 中无法路由的消息会去到哪里?🌟

在 RabbitMQ 中,无法路由的消息去向由生产者发送时的 mandatory 参数决定:

  • mandatory = false (默认值):消息被 Broker 直接丢弃
  • mandatory = true:消息通过 ReturnCallback 机制返回给生产者进行处理。

重要提示:无法路由的消息不会自动进入死信队列(DLQ),因为死信队列用于处理已成功入队但后被拒绝或过期的消息。

【中等】RabbitMQ 中消息什么时候会进入死信交换机?🌟

RabbitMQ 中,消息会在以下三种情况下进入死信交换机(DLX):

  1. 被拒绝 (Rejected):消费者拒绝消息(basic.rejectbasic.nack)且不重新入队(requeue=false)。
  2. 已过期 (Expired):消息的存活时间(TTL)到期。
  3. 队列满 (Overflowed):队列达到最大长度限制,最老的消息会被挤出。

核心前提:必须在声明原始队列时通过 x-dead-letter-exchange 参数预先配置好死信交换机。

参考资料

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7