面试题专题:mq三

112 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

摘要

本次分享面试题专题均为自己21届校招时通过牛客以及自己面试遇到的问题,答案均为自己理解整理,如果有错误,请麻烦评论指出,万分感谢,如对您有所帮助,请交出您的三连或者点赞也是爱♥

rabbitmq 集群有什么用?

集群主要有以下两个用途:

  • 高可用:某个服务器出现问题,整个 RabbitMQ 还可以继续使用;
  • 高容量:集群可以承载更多的消息量。

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

不是,原因有以下两个:

  1. 存储空间的考虑:如果每个节点都拥有所有队列的完全拷贝,这样新增节点不但没有新增存储空间,反而增加了更多的冗余数据;
  2. 性能的考虑:如果每条消息都需要完整拷贝到每一个集群节点,那新增节点并没有提升处理消息的能力,最多是保持和单节点相同的性能甚至是更糟。

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

如果唯一磁盘的磁盘节点崩溃了,不能进行以下操作:

  • 不能创建队列
  • 不能创建交换器
  • 不能创建绑定
  • 不能添加用户
  • 不能更改权限
  • 不能添加和删除集群节点

唯一磁盘节点崩溃了,集群是可以保持运行的,但你不能更改任何东西。

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

RabbitMQ 对集群的停止的顺序是有要求的,应该先关闭内存节点,最后再关闭磁盘节点。如果顺序恰好相反的话,可能会造成消息的丢失。

rabbitmq 有几种交换机类型(模式)?

1)fanout: 它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列 中。

2)direct: 该类型的交换器路由规则也很简单,它会把消息 路由到那些BindingKey和RoutingKey完全匹配的队列中。

3)topic: 前面讲到direct类型的交换器路由规则是完全匹配 BindingKey 和RoutingKey,但是这种严格的匹配方式在很多情况下不能满足实际业务的需求。 topic 类型的交换器在匹配规则上进行了扩展,它与direct类型的交换器相似,也是将消息路由到BindingKey 和RoutingKey 相匹配的队列中,但这里的匹配规则有些 不同,它约定:

RoutingKey为一个点号"." 分割的字符串,如:com.itcast.client , com.itheima.exam。

BindingKey与RoutingKey一样也是点号"." 分割的字符串。 BindingKey中可以存在两种特殊的字符串" " 和 "#" , 用于模糊匹配,其中 "#"用于匹配一个单词," "用于匹配多个单个(可以是零个)。

4)headers : 该类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据 发送的消息内容中的headers属性进行匹配。