开始

image.png
rabbit03和01与02无法通信。相当于中间画了一条线做分区,这就叫做网络的分区。

image.png

队列的元数据三个节点都有的,也就是说我给rabbit01发送一个请求建立一个队里的时候,rabbit1会通知rabbit3要建一个队列,rabbit3会修改它的元数据,rabbit3再通知rabbit2,rabbit2再修改元数据,rabbit2再通知rabbit1修改元数据。
新建队列的请求转了一圈之后,这个队列的请求才会完成,所以这就叫做单项环状网络模型,在遇到一些网络问题的时候。

image.png

例如1和3通信不上了。3和2 ,1和2可以通信上。
image.png
手工的制造一个网络分区把和1链接上。1和1组成一个新的环状网络模型。
image.png
所以手工的制造一些网路分区,有的时候是故障,有的时候有一定的用的。总比单项的环断开了。整个业务跑步了要好。这是网络分区的意义。

网络分区的影响

image.png

client1要发送消息给queue3 ,但是它发到rabbit01上发现没有,Queue和rabbit01的链接已经断开了。发送消息就失败了。clien1发送消息的业务就受影响了。
cient2给Queue1发消息,但是它连接的是Rabbit03.。rabbit3要把消息转发到rabbit01上去,再存在rabbit01的Queue1上,但是现在转不到了。网络分区了。所以这个时候就影响了消息的发送。
image.png
接收消息的情况:
client1要从Rabbit01上手Queue1的消息,它可以收到。Queue1有消息后,直接通过Rabbit01节点推给Client1,收消息没有任何的影响。
Client2要从Queue3上收消息。Rabbit03这个节点直接把消息推给Client2
image.png

Client1链接Rabbit01要收Queue3的消息是收不到的。Queue3的消息是放在Rabbit03节点上的。
Client2要收Queue1的消息 也是同样收不到的。
image.png

配置了镜像队列

配置了镜像队列,分区前
Queue1的主在Rabbit01上,从在Rabbit3上、
Queue2的住在Rabbit02上,从在Rabbit03上,
Queue3的主在Rabbit03上,从在Rabbit02上。
Queue1收到消息会把消息从主分发到从,
image.png
分区后:
由于网络故障 Rabbit02断开和01 、03的链接。
Queue2和Queue3有影响,Queue2的主在Rabbit02上,Rabbit03上有Queue2的从,
网络分区后,Rabbit03觉得Rabbit02挂了,她要挑起大梁,它的Queue2的从变成Queue2的主,也就是它自己会任务它自己持有的是Queue2的主队列,
对于QUeue3 来说它的主在Rabbit03上,从在Rabbit02上,
Rabbi02分区后反而觉得Queue03挂了,它自己拿的Queue3变成主。
image.png

分区前,另外一种情况
image.png

image.png

总结

image.png

结束