写点什么

为了你们不错过金三银四,我真是操碎了心!RabbitMQ 面试真题来了

用户头像
极客good
关注
发布于: 刚刚
  • 疫情当前,很多公司、企业都在不断裁员,害怕跳槽只跳了一半,自己跳了出去却没有公司要自己。

  • 觉得自己工作经验不够,想在小公司再干一年。


以上这两点总结下来其实就是一句话!


对于自己的实力没有信心,自己所掌握的知识点还不足以支撑自己去跳槽,找到高薪岗位!


我其实一直有一句座右铭:新年过完了,其实马上就是下一个新年了,每次都想着等一等在去努力、等一等再去冲刺,那么永远都会慢别人一步!


所以赶紧私信我 【RabbitMQ 面经】 免费领取 Java 高阶学习资源互联网企业面经

正文

问题一:RabbitMQ 中的 broker 是指什么?cluster 又是指什么?

答:broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应用程序。cluster 是在 broker 的基础之上,增加了 node 之间共享元数据的约束。

问题二:什么是元数据?元数据分为哪些类型?包括哪些内容?与 cluster 相关的元数据有哪些?元数据是如何保存的?元数据在 cluster 中是如何分布的?

答:在非 cluster 模式下,元数据主要分为 Queue 元数据(queue 名字和属性等)、Exchange 元数据(exchange 名字、类型和属性等)、Binding 元数据(存放路由关系的查找表)、Vhost 元数据(vhost 范围内针对前三者的名字空间约束和安全属性设置)。在 cluster 模式下,还包括 clusternode 位置信息和 node 关系信息。元数据按照 erlang node 的类型确定是仅保存于 RAM 中,还是同时保存在 RAMdisk 上。元数据在 cluster 中是全 node 分布的。

问题三:RabbitMQ 概念里的 channel、exchange 和 queue 这些东东是逻辑概念,还是对应着进程实体?这些东东分别起什么作用?

答:queue 具有自己的 erlang 进程;exchange 内部实现为保存 binding 关系的查找表;channel 是实际进行路由工作的实体,即负责按照 routing_keymessage 投递给 `q


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


ueue。由AMQP 协议描述可知,channel是真实TCP连接之上的虚拟连接,所有AMQP命令都是通过channel发送的,且每一个channel有唯一的ID。一个 channel只能被单独一个操作系统线程使用,故投递到特定channel上的message是有顺序的。但一个操作系统线程上允许使用多个channelchannel号为 0 的channel用于处理所有对于当前connection全局有效的帧,而 1-65535 号channel用于处理和特定channel` 相关的帧。


其中每一个 channel 运行在一个独立的线程上,多线程共享同一个 socket

问题四:vhost 是什么?起什么作用?

答:vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的 queueexchangebinding 等,但最最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度,vhost 可以作为不同权限隔离的手段(一个典型的例子就是不同的应用可以跑在不同的 vhost)。

问题五:若 cluster 中拥有某个 queue 的 owner node 失效了,且该 queue 被声明具有 durable 属性,是否能够成功从其他 node 上重新声明该 queue ?

答:不能,在这种情况下,将得到 404 NOT_FOUND 错误。只能等 queue 所属的 node 恢复后才能使用该 queue 。但若该 queue 本身不具有 durable 属性,则可在其他 node 上重新声明。

问题六:能够在地理上分开的不同数据中心使用 RabbitMQ cluster 么?

答:不能。第一,你无法控制所创建的 queue 实际分布在 cluster 里的哪个 node 上(一般使用 HAProxy + cluster 模型时都是这样),这可能会导致各种跨地域访问时的常见问题;第二,ErlangOTP 通信框架对延迟的容忍度有限,这可能会触发各种超时,导致业务疲于处理;第三,在广域网上的连接失效问题将导致经典的“脑裂”问题,而 RabbitMQ 目前无法处理(该问题主要是说 Mnesia)。

问题七:为什么 heavy RPC 的使用场景下不建议采用 disk node ?

答:heavy RPC 是指在业务逻辑中高频调用 RabbitMQ 提供的 RPC 机制导致不断创建、销毁 reply queue进而造成 disk node 的性能问题(因为会针对元数据不断写盘)。所以在使用 RPC 机制时需要考虑自身的业务场景。

问题八:Basic.Reject 的用法是什么?

答:该信令可用于 consumer 对收到的 message 进行 reject 。若在该信令中设置 requeue=true,则当 RabbitMQ server 收到该拒绝信令后,会将该 message 重新发送到下一个处于 consume 状态的 consumer 处(理论上仍可能将该消息发送给当前 consumer)。若设置 requeue=false ,则 RabbitMQ server 在收到拒绝信令后,将直接将该 messagequeue 中移除。

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
为了你们不错过金三银四,我真是操碎了心!RabbitMQ面试真题来了