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

相关推荐
GDDGHS_1 小时前
kafka夺命连环三十问(16-22)
分布式·kafka
r i c k2 小时前
MongoDB分布式集群搭建----副本集----PSS/PSA
数据库·分布式·mongodb
龙哥·三年风水2 小时前
群控系统服务端开发模式-应用开发-前端部门功能开发
分布式·vue·群控系统
songqq272 小时前
【快速上手】Kafka-Eagle 监控的安装部署
分布式·kafka
太阳伞下的阿呆3 小时前
kafka-clients之max.block.ms
分布式·kafka·消息队列
东方巴黎~Sunsiny3 小时前
kafka可视化管理平台-kafka-console-ui
分布式·kafka
清酒伴风(面试准备中......)3 小时前
计算机网络基础——针对实习面试
计算机网络·面试·职场和发展
阑梦清川3 小时前
RabbitMQ介绍和快速上手案例
分布式·rabbitmq·ruby
菜鸟分享录3 小时前
RabbitMQ教程:工作队列(Work Queues)(二)
分布式·rabbitmq·ruby
极客先躯4 小时前
高级java每日一道面试题-2024年11月08日-RabbitMQ篇-RabbitMQ有哪些重要的角色?有哪些重要的组件?
java·rabbitmq·java-rabbitmq