以rabbitmq集群有两个node为例,关闭两台机器的防火墙
1.如果你此时还未安装rabbitmq
那么可以在装第一个RM时只勾选rabbitmq,然后在安装时在弹出的cookie值填写为“aaaaa”(这个值可以随便填)
然后在另外一个pc安装rabbitmq时的cookie值也填写为“aaaaa”,只要两台rabbitmq的cookie值一样,二者就可以进行通信
2.如果你此时已经安装了rabbitmq了,找到C:UsersAdministrator这个目录下的.erlang.cookie这个文件,
用其中一台的.erlang.cookie文件去覆盖掉另外一台rabbitmq的.erlang.cookie文件(为了保证两个node的cookie一致)
下面进行cluster的操作,我的两台机器的ip分别是10.10.10.184,10.10.10.213,Cluster的操作在任意一台node上执行都可以,只要node之间是可以联通的
以10.10.10.184为例,在C:Program FilesNetBrainRabbitMQsbin下执行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status
接着执行如下操作:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@WIN2008R2P1 ##其中WIN2008R2P1为需要加入的10.10.10.213的机器名称
rabbitmqctl start_app
如果出现失败请检查cookie值是否一致,并且查看两台机器的防火墙是否关闭
添加成功后登陆http://10.10.10.184:15672/#/,也页面如下所示:
执行policy,还是在sbin目录下执行
rabbitmqctl set_policy ha-all ".*" "{""ha-mode"":""all"", ""queue-master-locator"":""min-masters"", ""ha-sync-mode"":""automatic""}"
这条policy的意思是要求所有机器都产生一个镜像,哪个镜像上node最少就设定哪个是主镜像;所有的queue都automatic sync
至此,你可以在执行task的过程中停掉其中一个node,你会发现task并没有丢失。rabbitmq采用ha-all的方式,consumer取消息队列时只从其中master节点取