RabbitMQ 面试

1rabbitmq 的使用场景有哪些?

RabbitMQ 是一个功能强大的开源消息代理,常用于构建可靠的、高效的分布式系统。它提供了以下使用场景:

异步消息传递:可以在不同的应用程序之间进行可靠的异步消息传递,实现解耦和高并发处理。

工作队列:用于在多个工作者(Worker)之间分配任务,实现负载均衡和并行处理。

发布/订阅模式:支持创建交换机(Exchange)和多个队列(Queue),发布者将消息发送到交换机,订阅者从队列中接收消息,实现广播和订阅功能。

RPC(Remote Procedure Call)远程过程调用:通过请求-响应模式在客户端和服务器之间进行通信,实现远程方法调用。

2rabbitmq 有哪些重要的角色?

Producer(生产者):发送消息的应用程序。

Consumer(消费者):接收并处理消息的应用程序。

3rabbitmq 有哪些重要的组件?

Broker(代理):消息中间件服务器,负责接收、存储和转发消息。

Exchange(交换机):接收生产者发送的消息,根据一定的规则将消息路由到一个或多个队列。

Queue(队列):保存消息直到消费者准备好处理它们。

Binding(绑定):定义了交换机和队列之间的关系规则,用于将消息路由到指定的队列。

4rabbitmq 中 vhost 的作用是什么?

Vhost(虚拟主机)是 RabbitMQ 中用于隔离不同应用之间的逻辑和资源的概念。每个 vhost 都拥有自己独立的交换机、队列、绑定等,可以实现应用之间的隔离和安全性。

5rabbitmq 的消息是怎么发送的?

Producer 将消息发送给指定的 Exchange。

Exchange 根据预设的路由规则将消息路由到一个或多个队列。

队列接收到消息并存储在其中。

Consumer 从队列中拉取消息进行处理。

6rabbitmq 怎么保证消息的稳定性?

持久化:通过设置消息的持久化标志,将消息保存到磁盘上,即使服务器重启也能保留消息。

确认机制:消费者在处理完消息后发送确认消息给 RabbitMQ,告知消息已经被正确处理。

事务机制:生产者可以将一组操作封装在事务中,要么全部成功提交,要么全部回滚,保证消息的完整性。

7rabbitmq 怎么避免消息丢失?

持久化消息:将消息标记为持久化,确保消息在服务器重启后仍然可用。

确认机制:消费者在处理消息后发送确认消息,确保消息被正确处理。

限制队列容量:设置队列的最大长度或使用限流机制,避免队列溢出导致消息丢失。

8要保证消息持久化成功的条件有哪些?

消息本身需要标记为持久化(persistent)。

队列需要标记为持久化(durable)。

Exchange 需要标记为持久化(durable)。

消费者需要发送确认消息(ack)。

9rabbitmq 持久化有什么缺点?

可能会降低性能:持久化消息需要将消息写入磁盘,可能会引起性能下降。

磁盘占用较大:持久化的消息会占用磁盘空间,特别是在消息量大或消息体较大时。

10rabbitmq 有几种广播类型?

Fanout(扇形):将消息广播到所有绑定到交换机上的队列,无需指定路由键。

Direct(直连):根据消息的路由键将消息广播到与之完全匹配的队列。

Topic(主题):根据消息的路由键和通配符模式将消息广播到匹配的队列。

11rabbitmq 怎么实现延迟消息队列?

要实现延迟消息队列,可以使用 RabbitMQ 的插件(rabbitmq_delayed_message_exchange)或者借助 TTL(Time To Live)和死信队列机制。

12rabbitmq 集群有什么用?

高可用性:通过在多个节点之间复制和分布数据,提高系统的可用性和容错能力。

负载均衡:多个节点共同处理消息,分摊系统负载,提高消息处理能力。

水平扩展:可以根据需要增加或减少节点,实现系统的水平扩展。

13rabbitmq 节点的类型有哪些?

磁盘节点(Disk Node):保存队列数据和元数据的节点,对磁盘进行读写操作,适合于高可用性和持久化需求。

内存节点(RAM Node):仅保存队列数据而不保存元数据的节点,对内存进行读写操作,适合于大规模消息传递和高吞吐量需求。

磁盘节点和内存节点的混合节点(Disk and RAM Node):同时保存队列数据和元数据,既能提供持久化能力,又能提供较高的吞吐量。

14rabbitmq 集群搭建需要注意哪些问题?

节点之间的网络连接:确保节点之间可以互相通信。

节点的命名和集群配置:为每个节点指定唯一的名称,并在配置文件中指定节点所属的集群。

数据同步和复制:通过设置镜像队列(Mirrored Queue)或者使用插件实现队列数据的同步和复制。

负载均衡和故障转移:配置集群中的负载均衡策略和故障转移策略,确保消息的均衡处理和高可用性。

15rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?

在 RabbitMQ 集群中,每个节点都是其他节点的完整拷贝。这是因为在集群中,每个节点都需要知道所有队列、交换机和绑定的元数据信息,以便正确地路由消息。

16rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?

如果 RabbitMQ 集群中唯一一个磁盘节点崩溃了,那么磁盘节点上的队列和消息就会不可用,但其他内存节点仍然可用。此时,消息只能被持久化到磁盘节点上的队列中,无法被消费者读取。

17rabbitmq 对集群节点停止顺序有要求吗?

RabbitMQ 对集群节点停止顺序没有特别的要求。可以按照需要选择停止节点的顺序,但建议先停止消费者节点,再停止生产者节点,最后停止集群节点。这样可以保证消息的正常处理和集群的高可用性。

相关推荐
Lee川20 分钟前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i2 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有3 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有3 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫4 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫4 小时前
Handler基本概念
面试
Wect4 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼5 小时前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼5 小时前
Next.js 企业级落地
前端·javascript·面试
掘金安东尼5 小时前
React 性能优化完全指南 2026
前端·javascript·面试