rabbitmq消息队列,rabbitmq消费者集群会重复消费吗

  rabbitmq消息队列,rabbitmq消费者集群会重复消费吗

  根据项目的工作需求,需要使用RabbitMQ的集群相关功能,所以花了时间进行调查和测试。只是暂时完成了集群建设使用和集群负载均衡管理的第一步,中间走了很长一段路。好在有很多人玩过这个游戏,这个社区也很成熟,参考资料也很充足。这次尝试之后,我想记录下我自己的尝试。

  RabbitMQ集群,这次我主要是在Windows环境下搭建的。是的,Windosw附带的NLB用于管理负载平衡。虽然方便,但具体项目测试还没开始,只是考虑作为一个方案。

  第一部分——RabbitMQ服务环境安装服务器环境是两台WinServer2008x64虚拟机。目前RabbitMQ服务分别建立在两台计算机上。一般安装步骤如下:

  到官网下载相关安装文件http://www . rabbit MQ.com/install-windows.html,主要包括

  A) Python安装文件:python_win32_ensetup.msi.rar

  B) Erlang安装文件(RabbitMQ基于Erlang开发(otp_win32_R16B03-1.exe

  C) RabbitMQ安装文件:rabbitmq-server-3.2.4.exe

  有关的安装说明,请参考官方网站上的。这里就不解释了,可以参考几个博客。

  我在本地测试的两台服务器的名字分别是RBMQ-2/RBMQ-3。安装完成后,RabbitMQ默认创建节点/帐户。节点的信息是rabbit MQ @ rbqm-2/rabbit MQ @ rbqm-3,创建admin/admin。

  看上面两个服务的安装,可以参考一些关于集群的内容,放到RabbitMQ的官网上。(http://www。Rabbit MQ.com/clustering.html))官网主要内容是在Linux系统上操作。Windows上的参考很少,但操作内容大致相同。

  第二部分——集群的配置

  在构建RB集群时,需要比较RB集群下各个节点的状态。有以下几个方面的区别。

  a)队列元数据(Queue metadata))队列元数据(Queue metadata)队列的名称和相关属性)记录是否是永久队列,空队列是否被自动删除等。);

  b)元数据交换规则的交换元数据(交换规则名称和相关属性;

  c)注册绑定元数据(binding metadata)消息路由关系的表记录。

  d)虚拟主机元数据:

  在RB集群中,每个节点都有一个exchange副本,队列元数据也在每个节点上注册一个,但是队列中的消息内容只存在于接收消息的节点上。如果节点非正常关闭,它将处于该点。

  为什么是这样的设计?书《RabbitMQIn Action》中的描述是:

  a)撤回

  b)减少记忆

  介绍完RB集群的这些特点,接下来就是配置RB集群(http://www . rabbit MQ . com/clustering . html)。

  因为RB的集群依赖于Erlang的集群,所以首先要建立Erlang的集群镜像。Erlang集群中的每个节点都是由一个幻影cookie进程实现的。这个cookie存储在C:\ Users \ administrator Users \ erlang.cookie中(C:\windows目录中也有. Erlang . cookie)。两者是一样的。各个节点的这两个文件必须要保持一致

  确认两台服务器的其余部分

  AbbitMQ服务(以下简称RB)已经启动,但如果没有启动,将会启动:

  rabbitmqctl状态

  ……

  rabbit MQ-服务器detcached

  ……

  RB启动后,配置集群前,可以先检查集群的情况,方便设置后对比:

  rabbitmqctl cluster_status

  启动下面的集群配置,并将RBMQ-2添加到RBMQ-3的集群中。具体配置如下:

  在RBMQ-2机器上执行:

  rabbitmqctl stop_app

  rabbit mqctl join _ cluster rabbit @ rabbit 3

  rabbitmqctl start_app

  然后分别在RBMQ-2/RBMQ-3中查询集群配置:

  或者您可以在web控制台中查看(关闭RB2并打开RB3):

  至此,RB的集群服务已经配置完毕,接下来就是测试集群消息了。

  关于集群,有几点需要注意,即节点的类型设置:

  a)集群中必须至少有一个磁盘节点,这样集群的配置才有效;

  b)只有当集群中的磁盘型节点处于运行状态时,此时对集群相关配置的修改才有效,否则全部无效;

  c)如果正在运行的集群磁盘节点宕机,其他ram节点仍可继续提供服务。但是如果此时所有的ram节点都宕机了,那么在disc节点没有启动的情况下,ram节点是无法启动的,因为所有的配置都存储在disc节点下。启动时,需要从磁盘节点读取相应的配置。

  d)在d)RB集群中,每个节点都有一份节点间交换的副本,但消息队列只存在于对应的接收节点上,其他节点不存储。如果相应的节点出现故障,收到的消息队列可能会全部丢失。

  第三部分:3354队列镜像配置在完成RB集群的配置后,在高可用性方面又前进了一步。了解了RB簇的特性后,我们知道RB中队列的消息只存在于对应的接收节点中。在这种情况下,当存储消息的相应节点(或主服务)异常关闭时,就有可能丢失消息。如何改善这种应用场景,RB为我们提供了镜像队列的方式。(http://www.rabbitmq.com/ha.html)

  镜像队列的特征:

  经过归纳,主要有以下几点:

  1.镜像模式配置完成后,将有一个主队列和几个镜像队列(或从队列)。收到消息后,主队列会将消息同步到所有当前镜像。如果主队列的消息被处理并删除,镜像队列的数据将被同步删除。

  2.当主队列非正常关闭时,RB会将作为镜像服务的队列提升为主队列,其他队列将继续作为当前主队列的镜像队列。

  镜像队列由RB的配置策略实现,

  镜像队列提供三种模式:

  All:镜像所有节点队列;

  精确:指定镜像队列中节点的最大镜像数;

  节点:只为指定的特定节点配置镜像队列;

  模式的内容是一个正则表达式。以截图中的‘q’为例,表示所有以q开头的队列名都有镜像,其他队列没有镜像。

  第四部分——NLB介绍了为RB配置设置负载平衡的步骤:

  逐步配置NLB。

  http://blog.csdn.net/haoxiaozigang1/article/details/12198679

  http://blog.csdn.net/haoxiaozigang1/article/details/12444963 NLB深度测试的逐步配置(续)

  第五部分——测试代码

  参考其他文章,http://www.cnblogs.com/rollenholt/p/4098089.html.

  http://jingyan . Baidu . com/article/e 73 e 26 c 0 c 3841 b 24 ADB 6 a 7 b 9 . html

  http://blog.csdn.net/haoxiaozigang1/article/details/12444963

  http://www . cnblogs . com/me-sa/archive/2012/11/15/rabbit MQ _ cluster _ mirrored _ queue . html

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: