RabbitMQ是一个开源的消息代理软件,也被称为消息队列。它支持多种消息协议,并且可以用于多种编程语言,包括但不限于Java、.NET、Python、Ruby等。RabbitMQ使用高级消息队列协议(AMQP)来实现消息的发送和接收,它提供了可靠、灵活和可扩展的消息服务。
本文不讲解如何部署rabbitmq集群,只讲解下如何让集群数据实现高可用
环境准备:
| IP | 名称 | 运行方式 |
| 192.168.49.224 | rabbitmq1 | docker |
| 192.168.49.186 | rabbitmq2 | docker |
| 192.168.49.83 | rabbitmq3 | docker |
当前集群状态:三个节点已组建为集群,并无其他设置
首先先来看下消息是如何发送的,Exchanges(交换器)和 Queues(队列)是两个核心组件,它们共同工作以实现消息的发送和接收,交换器充当消息的路由中心。生产者将消息发送到交换器,而不是直接发送到队列,交换器根据不同的类型会有不同发送消息的方式到队列,主要类型如下:
direct:根据路由键将消息直接路由到具有匹配键的队列
fanout:将消息广播到所有绑定到该交换器的队列,忽略路由键
topic:根据路由键模式匹配将消息路由到队列
headers:根据消息的 headers 属性将消息路由到队列,忽略路由键
下面演示通过路由键的方式来向队列发送消息
1、登录管理页面,创建队列(Queues),持久化方案选择持久(Durable),如图:

队列创建在了集群中的rabbitmq1节点上,如图:

2、创建交换器(Exchanges),类型选择路由键,如图:


3、将交换器绑定到队列,点击刚才创建的交换器,点击Bindings,如图:

点击Bind后即可绑定成功,此时如果切换到Queues页面,点击刚才创建的队列,也可以看到绑定过来的交换器,如图:

4、验证消息发送,点击创建的交换器new_chanage,下方有个Publish message,输入路由键,根据此路由键就能向绑定的队列发送消息,模式选择可持续,这样就能存在本地磁盘了,如图:

点击推送消息后,在队列页面可以看到Ready和Total已经显示有一条消息,如图:

登录rabbitmq1节点,在mnesia/rabbit@rabbitmq1/msg_stores/vhosts路径下可以看到创建的队列以及队列中消息,如图:

此时登录其他两个节点,可以发现并没有消息内容,因为虽然当前rabbitmq是集群,但是数据并没有做高可用同步,单个节点生产的消息只保留在了当前节点,没有同步到其他节点,此时如果这个节点挂了,数据就会消失,因此数据的高可用非常重要,看下面教程配置集群数据高可用
配置集群高可用
1、登录任意节点,点击Admin–policies,如图:

设置策略名称,匹配模式,以及匹配范围,同步模式,如图:

pattern:匹配模式,^表示匹配所有
ha-mode:设置镜像队列为all,此模式下,队列会在集群中的所有节点上进行镜像
ha-sync-mode:同步模式,automatic表示自动同步,manual表示手动
在管理界面可以看到已经配置的策略,如图:

在命令行也可以看到创建的策略,如图:

设置完成后,观察其余两个节点,能看到mnesia目录下已经同步过来新的消息了,在新增节点后,数据会自动同步到新节点上
删除节点很简单,首先停止要删除的节点上的rabbitmq,然后在其他节点执行如下命令即可:
rabbitmqctl forget_cluster_node rabbit@rabbitmq2 #删除节点2




