消息队列面试题, RabbitMQ 中无法路由的消息会去到哪里?
消息队列面试题, RabbitMQ 中无法路由的消息会去到哪里?
QA
Step 1
Q:: 面试题
A:: RabbitMQ 中无法路由的消息会去到哪里?
Step 1
Q:: 答案
A:: 在 RabbitMQ 中,如果一条消息无法被路由到任何队列,它的去向取决于 exchange 的类型和配置:1) 默认情况下,消息将被丢弃。2) 如果 exchange 被配置了 'alternate-exchange',消息将被路由到这个备用交换器。3) 如果消息被标记了 'mandatory'
标志,且没有找到匹配的队列,消息将返回给发送者。
Step 2
Q:: 面试题
A:: 什么是 RabbitMQ 中的 dead-letter exchange (DLX)
?
Step 2
Q:: 答案
A:: dead-letter exchange (DLX) 是一种特殊的交换器,用于处理那些无法被成功处理的消息。这些消息可能由于过期、被拒绝(nack/
reject)或者队列已满等原因而成为死信。DLX 可以将这些消息重新路由到其他队列进行进一步处理或记录。
Step 3
Q:: 面试题
A:: RabbitMQ 中的消息持久化是什么?
Step 3
Q:: 答案
A:: 消息持久化指的是将消息保存到磁盘,以防 RabbitMQ 服务器重启时数据丢失。要实现消息持久化,需要在声明队列时将其设置为持久化队列(durable),同时在发送消息时,将消息的 delivery_mode 属性设置为 2
(持久)。
Step 4
Q:: 面试题
A:: 什么是 RabbitMQ 中的交换器(Exchange)?它有哪些类型?
Step 4
Q:: 答案
A:: 交换器(Exchange)是 RabbitMQ 中用于接收生产者发送的消息并根据绑定规则将其路由到队列的组件。RabbitMQ 中有四种主要类型的交换器:1) direct:直接交换器,根据精确匹配的路由键路由消息。2) topic:主题交换器,根据模式匹配的路由键路由消息。3) fanout:扇出交换器,将消息广播到所有绑定的队列,不考虑路由键。4)
headers:头部交换器,根据消息头部属性进行路由。
Step 5
Q:: 面试题
A:: RabbitMQ 中的消息确认机制是如何工作的?
Step 5
Q:: 答案
A:: 消息确认机制确保消息从生产者发送到 RabbitMQ 服务器,再从服务器发送到消费者时不会丢失。1) 对于生产者,消息确认是通过 publisher confirms 来实现的,当消息成功存储到队列中后,RabbitMQ 会发送一个确认(ack)。2) 对于消费者,消息确认是通过 basic.ack、basic.nack 和 basic.reject 方法来实现的。消费者处理完消息后,发送 basic.ack 确认消息处理成功,如果处理失败,可以使用 basic.nack 或 basic.
reject 重新入队或丢弃消息。