interview
message-queue
RabbitMQ 中无法路由的消息会去到哪里

消息队列面试题, 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 重新入队或丢弃消息。

用途

面试这些内容主要是为了考察候选人对消息队列系统的理解及应用能力。RabbitMQ 作为一种广泛使用的消息队列系统,在分布式系统和微服务架构中有着重要作用。它可以实现系统解耦、异步处理、负载均衡等功能,确保系统的高可用性和可扩展性。在实际生产环境中,当需要处理高并发请求、异步任务、跨服务通信或者日志收集时,RabbitMQ 都是常见的选择。\n

相关问题

🦆
面试题

如何在 RabbitMQ 中实现消息的顺序消费?

🦆
答案

要实现消息的顺序消费,可以确保所有消息都通过同一个队列进行处理,并且消费者处理消息的速度能够跟上生产者的发送速度。可以使用消息确认机制来保证消息被逐一处理,而不是并行处理。

🦆
面试题

RabbitMQ 中的消息 TTL 是什么?

🦆
答案

消息 TTL(Time To Live)是消息在队列中存活的时间。超过这个时间的消息将被自动删除。TTL 可以在队列级别和消息级别设置:队列级别通过参数 'x-message-ttl' 设置,消息级别通过消息属性 'expiration' 设置。

🦆
面试题

如何在 RabbitMQ 中处理消息的重复消费问题?

🦆
答案

处理消息的重复消费问题,可以使用以下几种方法:1) 在消息中添加唯一 ID,并在消费者端进行去重处理。2) 使用 RabbitMQ 的消息确认机制,确保消息只被处理一次。3) 配置合适的队列和交换器策略,避免消息重复投递。

🦆
面试题

RabbitMQ 中的流控(Flow Control)机制是什么?

🦆
答案

流控机制用于防止 RabbitMQ 服务器过载。当服务器检测到内存或磁盘使用超过某个阈值时,会暂停接受新的消息,直到资源使用恢复到安全水平。可以通过配置内存和磁盘使用的阈值来控制流控机制。