RabbitMQ面试题(四)

  1. RabbitMQ中的broker 是指什么?cluster 又是指什么?
    答:broker是指一个或多个erlang node的逻辑分组,且node上运行着RabbitMQ应用程序。cluster是在broker的基础之上,增加了node之间共享元数据的约束。
  2. 什么是元数据?元数据分为哪些类型?包括哪些内容?与cluster相关的元数据有哪些?元数据是如何保存的?元数据在cluster中是如何分布的?
    答:在非cluster模式下,元数据主要分为Queue元数据(queue名字和属性等)、Exchange元数据(exchange名字、类型和属性等)、Binding元数据(存放路由关系的查找表)、Vhost元数据(vhost 范围内针对前三者的名字空间约束和安全属性设置)。在cluster模式下,还包括cluster中node位置信息和node关系信息。元数据按照erlang node的类型确定是仅保存于RAM中,还是同时保存在RAM和disk上。元数据在cluster中是全node分布的。
  3. RabbitMQ节点的类型有哪些?
    答:
    磁盘节点(disk node):消息会存储到内存和磁盘。
    内存节点(RAM node):消息都存储在内存中,重启服务器消息丢失,性能高于磁盘类型。
  4. RAM node(节点) 和disk node(节点)的区别?
    答:RAM类型的节点只会在磁盘里存放cluster中使用的disk node的地址这样的元数据,而其他的元数据则会存放在内存里,而disk类型的节点会把相关的元数据在磁盘和内存都存储。所以才会要求RabbitMQ cluster中至少存在一个disk node。
  5. 在单node系统和多node构成的cluster系统中声明queue、exchange ,以及进行binding会有什么不同?
    答:在单node系统上声明queue时,只要该node上的相关元数据有了变更,就会得到Queue.Declare-ok回应。而在cluster上声明queue,要求全部node根据自己的类型,只变更内存上的元数据,还是需要更新内存和磁盘上的元数据,全部node更新完后,才会得到Queue.Declare-ok回应。
  6. 客户端连接到cluster中的任意node上是否都能正常工作?
    答:可以。
  7. RabbitMQ集群有什么用?
    答:当某个RabbitMQ服务节点出现了问题,整个RabbitMQ还可以提供正常服务,实现了高可用。使用了集群,可以承载更多的消息量,实现了高容量。
  8. RabbitMQ集群中每个节点是其余节点的完整拷贝吗?
    答:不是,首先从存储空间考虑,假如每个节点都拥有所有队列的完全拷贝,这样新添加节点不仅没有新添加存储空间,反而添加了更多的冗余数据,其次就是出于性能的考虑,假如每条消息都需要完整拷贝到每一个集群节点,那新添加节点并没有提升解决消息的能力,最多是保持和单节点相同的性能甚至是更糟。
  9. RabbitMQ集群中唯一一个磁盘节点崩溃了会发生什么情况?
    答:唯一磁盘节点崩溃了,集群是可以保持运行的,但你不能更改任何东西,如不能创立队列,不能创立交换器,不能创立绑定,不能增加客户,不能更改权限,不能增加和删除集群节点。
  10. RabbitMQ对集群节点中止顺序有要求吗?
    答:RabbitMQ对集群的中止要求先关闭内存节点,最后再关闭磁盘节点,否则可能会造成消息丢失。
发布了289 篇原创文章 · 获赞 302 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/104840334
今日推荐