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

相关推荐
张某布响丸辣1 小时前
探索消息中间件:RabbitMQ深度解析
分布式·rabbitmq
wclass-zhengge1 小时前
RabbitMQ篇(死信交换机)
分布式·rabbitmq
J老熊2 小时前
Spring Cloud Netflix Eureka 注册中心讲解和案例示范
java·后端·spring·spring cloud·面试·eureka·系统架构
我爱学Python!2 小时前
面试问我LLM中的RAG,秒过!!!
人工智能·面试·llm·prompt·ai大模型·rag·大模型应用
OLDERHARD2 小时前
Java - LeetCode面试经典150题 - 矩阵 (四)
java·leetcode·面试
银氨溶液3 小时前
MySql数据引擎InnoDB引起的锁问题
数据库·mysql·面试·求职
黄尚圈圈3 小时前
快速理解mQ(三)——RabbitMQ 各种交换机的区别与应用
分布式·rabbitmq
ON.LIN4 小时前
Hadoop大数据入门——Hive-SQL语法大全
大数据·数据库·hive·hadoop·分布式·sql
励志成为美貌才华为一体的女子5 小时前
《大规模语言模型从理论到实践》第一轮学习--第四章分布式训练
人工智能·分布式·语言模型
-$_$-5 小时前
【黑马点评】 使用RabbitMQ实现消息队列——1.Docker与RabbitMQ环境安装
分布式·docker·rabbitmq