媒介
RabbitMQ 作为消息中心件,可以与多个生产者和消费者进行绑定,但是如何只有一台 RabbitMQ 服务的话,那么这个 RabbitMQ 就需要处置处罚很多的哀求,假如该 RabbitMQ 节点挂掉了之后,那么所有与之相关的操作都无法进行了。我们可以升级 RabbitMQ 的硬件设施,提升 RabbitMQ 的处置处罚本领,但是硬件的升级成本是很高的,比力好的解决方法就是搭建 RabbitMQ 集群。
单机多节点搭建集群
一般的集群是指在多个不同的主机上搭建,为什么我这里选择单机多节点搭建集群呢?说白了就是我没有谁人经济实力,我手上没有那么多的云服务器,但是呢,知道了单机多节点的搭建,那么多机集群的搭建也就很简单了,步调基本上是相同的。
我们先来看看主机上已经存在的 RabbitMQ 服务rabbimqctl status:
可以看到我当前主机上已经存在一个 RabbitMQ 服务,他绑定的端口是 5672、15672和25672,这里绑定的端口的作用是啥就不具体先容了,要是不知道的可以看看前面的文章。
创建RabbitMQ节点
然后我们搭建的单机多节点就是一主两从的情况,以是我们需要再启动两个 RabbitMQ 节点:
Node NameAMQP协议端口号Web管理页面端口rabbit2567315673rabbit3567415674- RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management
- listener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
- RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management
- listener [{port,15674}]" RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
复制代码 RABBITMQ_NODE_PORT 指定启动的 RabbitMQ 的端口,RABBITMQ_SERVER_START_ARGS 是 RabbitMQ 的配置选项,rabbitmq_management listener 指定管理页面绑定的端口,RABBITMQ_NODENAME 是节点的名称。
那么如何查抄我们新的 RabbitMQ 启动成功了呢?我们可以打开云服务器的 15673和15674端口,然后看看管理页面是否能打开:
这时我们一台主机上就存在三个 RabbitMQ 节点了,接下来我们就将这三个几点加入到一个集群中。
制止服务并重置
在添加集群之前,我们需要制止 RabbitMQ 服务,并对其进行重置:
- rabbitmqctl -n rabbit2 stop_app
- rabbitmqctl -n rabbit2 reset
- rabbitmqctl -n rabbit3 stop_app
- rabbitmqctl -n rabbit3 reset
复制代码
将节点加入到集群中
我们将最先启动的 rabbit 节点作为主节点,然后 rabbit2 和 rabbit3 作为从节点:
- rabbitmqctl -n rabbit2 join_cluster rabbit@iZ2ze5bzkbeuwwqowjzo27Z
- rabbitmqctl -n rabbit3 join_cluster rabbit@iZ2ze5bzkbeuwwqowjzo27Z
复制代码 rabbit@iZ2ze5bzkbeuwwqowjzo27Z 是我们主节点的节点名称,可以通过 rabbitmqctl status 查看节点名称:
我们输入下令的时候大概会出现告诫,但是我们如今呢就先不管:
将节点加入到集群之后呢,我们重新启动 rabbit2 和 rabbit3:
- rabbitmqctl -n rabbit2 start_app
- rabbitmqctl -n rabbit3 start_app
复制代码 查看集群状态
RabbitMQ 节点加入集群之后,我们通过 rabbitmqctl cluster_status -n rabbit 来查看集群的状态:
然后登录到管理页面也是可以查看集群状态的:
宕机
我们分别用 rabbit 和 rabbit2 节点来添加两个队列:
用一个节点添加的队列,然后观察其他节点可以发如今其他的节点中也存在这些创建的队列:
然后我们向队列中发送消息:
然后在其他的节点中也是可以看到这个发送的消息:
然后我们关闭主节点 rabbit rabbitmqctl -n rabbit stop_app:
从其他节点的管理平台可以看到我们的 rabbit 节点是挂掉了。
并且,我们的 testQueue 是由 rabbit 节点创建的,当 rabbit 节点挂掉之后,testQueue 中的消息在其他节点中也不存在了,而不是由 rabbit 节点创建的队列则还存在:
也就是说,由哪个节点创建的队列,队列中的消息只会在这个节点中存在,那么如何解决这个问题呢?这就需要引入我们的 “仲裁队列” 了。
结论
感谢各位朋友们能够看到末端,找不到工作?某直聘已读不回?不妨看看这里超快复兴,助力每一位步伐员早日找到理想的工作
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |