1、RAM node和disk node的区别?

RAM node仅将fabric(即queue、exchange和binding等RabbitMQ基础构件)相关元数据保存到内存中,但disk node会在内存和磁盘中均进行存储。RAM node上唯一会存储到磁盘上的元数据是cluster中使用的disk node的地址。要求在RabbitMQ cluster中至少存在一个disk node。

2、vhost是什么?起什么作用?

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

3、在单node系统和多node构成的cluster系统中声明queue、exchange,以及进行binding会有什么不同?

当你在单 node上声明queue时,只要该node上相关元数据进行了变更,你就会得到Queue.Declare-ok 回应;而在cluster上声明queue,则要求 cluster上的全部node都要进行元数据成功更新,才会得到Queue.Declare-ok回应。另外,若node类型为RAM node则变更的数据仅保存在内存中,若类型为disk node则还要变更保存在磁盘上的数据。

4、客户端连接到cluster中的任意node上是否都能正常工作?

是的。客户端没有什么不同。

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

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

6、为什么heavy RPC的使用场景下不建议采用 disk node?

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

7、routing_key和binding_key的最大长度是多少?

255字节。

8、什么情况下producer不主动创建queue是安全的?

(1)message是允许丢失的;
(2)实现了针对未处理消息的republish功能(例如采用Publisher Confirm 机制)。

9、RabbitMQ中的cluster、mirrored queue,以及 warrens机制分别用于解决什么问题?存在哪些问题?

cluster是为了解决当cluster中的任意node失效后,producer和consumer均可以通过其他node继续工作,即提高了可用性;另外可以通过增加node数量增加cluster的消息吞吐量的目的。cluster本身不负责 message的可靠性问题(该问题由producer通过各种机制自行解决);cluster无法解决跨数据中心的问题(即脑裂问题)。另外,在cluster 前使用HAProxy可以解决 node的选择问题,即业务无需知道 cluster中多个node的ip地址。可以利用HAProxy进行失效node的探测,可以作负载均衡。下图为HAProxy +cluster 的模型。
Mirrored queue是为了解决使用cluster时所创建的queue的完整信息仅存在于单一node上的问题,从另一个角度增加可用性。若想正确使用该功能,需要保证:
(1)consumer需要支持 Consumer Cancellation Notification机制;
(2)consumer必须能够正确处理重复message。
Warrens是为了解决cluster中message可能被blackholed的问题,即不能接受producer不停 republish message但RabbitMQ server 无回应的情况。Warrens有两种构成方式,一种模型是两台独立的RabbitMQ server+HAProxy,其中两个server的状态分别为active和hot-standby。
该模型的特点为:两台server之间无任何数据共享和协议交互,两台server可以基于不同的RabbitMQ版本。

另一种模型为两台共享存储的RabbitMQ server+keepalived,其中两个server的状态分别为active和cold-standby。该模型的特点为:两台server基于共享存储可以做到完全恢复,要求必须基于完全相同的RabbitMQ版本。

Warrens模型存在的问题:
对于第一种模型,虽然理论上讲不会丢失消息,但若在该模型上使用持久化机制,就会出现这样一种情况,即若作为active的server异常后,持久化在该 server 上的消息将暂时无法被 consume,因为此时该 queue将无法在作为hot-standby的server上被重建,所以,只能等到异常的active server恢复后,才能从其上的queue中获取相应的message进行处理。而对于业务来说,需要具有:
a.感知AMQP连接断开后重建各种fabric的能力;
b.感知 active server 恢复的能力;
c.切换回 active server的时机控制,以及切回后,针对message先后顺序产生的变化进行处理的能力。
对于第二种模型,因为是基于共享存储的模式,所以导致active server异常的条件,可能同样会导致cold-standby server异常;另外,在该模型下,要求 active和cold-standby的server必须具有相同的node名和UID,否则将产生访问权限问题;最后,由于该模型是冷备方案,故无法保证cold-standby server能在你要求的时限内成功启动。

RabbitMQ中的cluster、mirrored queue,以及 warrens机制、RAM node、disk node及vhost介绍相关推荐

  1. RabbitMQ:镜像队列Mirrored queue

    在上一节[url=http://flyingdutchman.iteye.com/admin/blogs/1911811]<RabbitMQ集群类型一:在单节点上构建built-in内置集群&g ...

  2. [Erlang 0090] RabbitMQ 集群: Mirrored Queue

    之前提到过在集群环境中,队列只有元数据会在集群的所有节点同步,但是队列中的数据只会存在于一个节点;这不免让人失望:数据没有冗余容易丢数据甚至在durable的情况下,如果所在的节点当掉就要等待节点恢复 ...

  3. RabbitMQ中RPC的实现及其通信机制

    RabbitMQ中RPC的实现:客户端发送请求消息,服务端回复响应消息,为了接受响应response,客户端需要发送一个回调队列的地址来接受响应,每条消息在发送的时候会带上一个唯一的correlati ...

  4. Python实现RabbitMQ中6种消息模型(转)

    RabbitMQ与Redis对比 ​ RabbitMQ是一种比较流行的消息中间件,之前我一直使用redis作为消息中间件,但是生产环境比较推荐RabbitMQ来替代Redis,所以我去查询了一些Rab ...

  5. RabbitMQ中的生产者消费者与订阅发布者两种模式

    RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进 ...

  6. Rabbitmq中常用的五种连接方式

    目录 前提准备 方式一:  Hello World 服务端(provider)代码 客户端(customer)代码 方式二: work(以下方式都是通过工具类来创建connection对象) 有两种方 ...

  7. 深入理解RabbitMQ中的prefetch_count参数

    目录 prefetch_count参数的含义 RabbitMQ客户端中prefetch_count源码跟踪 prefetch_count参数使用 prefetch_count参数最佳实践 小结 pre ...

  8. java 队列和rabbitmq_java – 如何在不使消息出列的情况下浏览rabbitmq中的队列

    我正在尝试获取具有特定相关ID的消息,如rabbitmq docs中所述.但是我看到无关的消息被出列了.我不希望它发生.在得到消息后,我怎么能告诉rabbitmq没有出队,并且知道这不是我想要的那个. ...

  9. Openlayers中使用Cluster+Overlay实现点击单个要素和聚合要素时显示不同弹窗

    场景 Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合: Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合_BADAO_LIUMANG_QIZHI的博客 ...

最新文章

  1. 微型计算机一般按字长进行分类,关于计算机中:字,字节,字长,位的关系
  2. windows10访问ubuntu samba共享文件夹报错:不允许一个用户使用一个以上用户与服务器多重连接(没解决)
  3. Centos6.4 编译安装 nginx php
  4. DisJSet:Wireless Network(POJ 2236)
  5. python接口自动化(六)--发送get请求接口(详解)
  6. 将字符串转为16进制数_Python 如何将字符串转为字典
  7. ROS入门 常用工具
  8. python 文本处理操作
  9. redis客户端使用密码
  10. Eclipse 新手使用教程
  11. 解决Tomcat在cmd乱码问题
  12. Cherno OpenGL 教程
  13. Hvdc-vsc. 基于vsc的柔性直流输电模型 pscad实现
  14. STM8L 低功耗模式说明
  15. 升级这十点认知,你就是大佬!
  16. matlab命令行运行,命令行运行matlab
  17. word2010里脚注横线如何顶格
  18. 开源夏令营之项目汇报7
  19. 浅析文本挖掘(jieba模块的应用)
  20. 机器学习-增量训练方法

热门文章

  1. 领导者应具备的三个能力
  2. 在线编辑excel文件实现服务器后台存储,及页面还原
  3. 数据结构(二)——单链表的头插与尾插
  4. 一不小心,我爆啦!!!
  5. 苹果手机计算机歌曲谱,iPhone技巧篇 手机音乐如何导出至电脑
  6. 数据采集:Flume和Logstash的工作原理和应用场景
  7. 开源应用中心 | KodBox快捷高效的私有云在线文档管理系统
  8. keystore生成签名证书
  9. 2021年中国网络安全硬件市场竞争格局分析:深信服、新华三、启明星辰优势明显[图]
  10. 【测试方法】业务流测试法之场景法