RabbitMQ 默认的集群模式,也就是普通模式,最大的问题就在于存储队列完整数据的节点一旦宕机,
如果是非持久化队列,则消息丢失;如果是持久化队列+持久化消息,则必须等该节点恢复.
所以后来 RabbitMQ 开始支持队列(完整数据)复制.比如在有5个节点的集群里,可以指定某个队列的完整数据在2个节点上进行存储,从而在性能与高可用之间取得一个平衡,这就是镜像模式,它属于 RabbitMQ 的HA方案.
镜像模式解决了普通模式的问题,消息实体会主动在镜像节点间同步,而不是在消费者获取数据的时候临时从其他节点拉取.当然,该模式的副作用也很明显:
所以镜像模式适合在对可靠性要求较高的场合中使用.
综上所述,镜像模式的实质是镜像队列,一个队列想做成镜像队列,需要先设置 policy,然后客户端创建队列的时候,RabbitMQ 集群根据“队列名称”自动设置是普通集群模式或镜像模式.
下面我们通过管理后台将前面搭建的单机集群模式修改成镜像模式.
然后我们可以看到,该虚拟主机下面的交换机和队列都被打上了 test_mirror 标签
+1 表示同步了1个节点.
进入该队列详情,可以清晰的看到 : 策略名称,队列所属节点以及镜像节点等.
将就上一篇普通集群的代码.
通过 node2 的管理后台可以看到队列依然在.
但是有个细节,Node 从 rabbit1@node1 变成了 rabbit2@node2.
进入该队列详情,节点归属已经变成了 rabbit2@node2 , 而镜像节点是空.
一切正常.
可以看到,队列的归属节点不会再还原回去了.
参考:http://www.ywnds.com/?p=4741
原文:https://www.cnblogs.com/refuge/p/10359539.html