假设有3个rabbitmq A,B,C组成集群(普通集群)
测试一
1、在A中添加一个queue--mq.test1
2、连接B向mq.test1发送持久化数据
3、关闭A
现象1:当关闭A,发送程序能够继续发送数据,不会报错
原因:虽然A已经关闭了,但是B没有关闭,connection依旧存在。
4、关闭发送程序
5、重启启动发送程序
现象2:发送程序启动失败报错
原因:在一个集群中持久化的queue只会存在一个,虽然A关闭了,但是B、C中禁止创建相同名称的queue
6、重新打开A
现象3:A断开后发送的数据在mq.test1中是没有的,B中overview中显示的数据条数比A中多,但是mq.test1中显示的数据是一样的,B中多余的数据是无法通过queue取到的。
原因:在rabbitmq中,queue中的消息数据只会存放在创建的节点上,其它节点只是存放消息的引用地址
测试二
使用策略将A、B、C集群变成镜像集群,B、C镜像A中的mq.test1
1、连接B向mq.test1发送持久化数据
2、关闭A
现象1:当关闭A,发送程序能够继续发送数据,不会报错。重新启动发送程序也不报错
原因:当A关闭的时候,mq.test1就不属于A了,它会属于B、C中的一个
3、重新打开A
现象2:A中数据少于B、C,但是由于他们是属于一个集群,mq.test1的数据是一样的。如果要使A的数据跟B、C一样,可以同步一下