设置policy方法
例如我们将满足规则“*_mirrored_queue”的队列设置为镜像队列
./rabbitmqctl set_policy -p wenda-action mirrored_queue_policy_all ".*_mirrored_queue" '{"ha-mode":"all"}'之后申请的所有满足“*_mirrored_queue”规则的队列都是镜像队列tips:通过测试表明,使用policy的正则规则,可以设置镜像队列。如果没有设置policy,在申明队列的时候(queue_declare方法)使用x-ha-policy这个参数设置的镜像队列是无效的。设置了policy正则规则,不使用x-ha-policy参数,只要满足正则规则的queue也会自动变成镜像队列,(许多博客上是说明了用队列的x-ha-policy参数来设置镜像队列,却没有指明需要提前创建好policy规则)。
rabbitmq文档说明:
镜像队列的同步机制
当一个队列申明为镜像队列之后,并且ha-mode:all,集群中所有的节点都会有该队列的镜像,当队列已经有一些数据之后,往集群中加入一个新节点,新节点加入集群之后会自动创建该队列的镜像,但是队列之前是有数据的,这些数据是立马同步到新节点还是手动同步,这时候需要镜像队列的同步机制
queue_declare()方法中arg参数中有该配置:ha-sync-mode manual 手动同步 | automatic 自动同步tips:一个队列正在同步的时候,改队列的所有操作都会阻塞,因为各种原因可能会阻塞几分钟、几小时甚至几天。(所以队列同步需谨慎)