rabbitmq普通集群主节点创建的队列为什么从节点也能发消息?在从节点中创建队列,为什么也能同步到包括主节点和从节点上?
而从节点创建的队列,从节点宕机后,其他节点也显示队列down状态?
想不明白这一点,想要个详细的答案,谢谢。
首先,需要明确的是 RabbitMQ 普通集群中的节点不是从属关系,每一个节点都拥有完整的队列和消息内容,因此在任何一个节点上创建的队列都是可以在集群中任何一个节点上进行消息的发送和接收。
对于从节点在发消息的时候,实际上是将消息发送到了主节点,然后主节点再将消息广播给集群中的其他节点。这是因为在 RabbitMQ 集群中,消息是存储在队列中的,而队列只会存在于主节点上,从节点上并不会出现独立的队列。因此,创建队列实际上是在主节点上进行的,然后通过主节点的复制机制同步到其他节点上的。
但是,像前面所述,从节点上并不会存在独立的队列。因此,当从节点创建队列之后,它实际上只是发送了队列定义的信息到主节点上,然后主节点才会将队列创建出来。如果从节点发生故障,其他节点就会检测到该节点无法响应,并且就会自动将它标记为“down”。在这种情况下,从节点创建的队列状态自然就会变成 down。
基于普通集群实现队列的集群主从,消息会在集群中同步(至少三个节点)
rabbitmq普通集群中,每个节点都可以创建队列和消息存储库,而队列和存储库是相互独立的。这意味着,即使在从节点上,也可以创建主节点创建的队列,并且该队列可以在整个集群中漫游。 在从节点上创建新队列时,它会将新队列同步到主节点上。这是因为在 rabbitmq 中,当一个节点宕机时,它的所有信息会被复制到其他节点上,包括队列和存储库。因此,即使从节点宕机了,其他节点仍然可以使用它创建的队列和存储库。 另外,当使用从节点发送消息时,该消息会被复制到所有可用的节点上,包括主节点。这是因为在 rabbitmq 中,当一个节点发送消息时,它会将消息发送到所有与其有连接的节点上,包括从节点。因此,即使从节点宕机了,其他节点仍然可以使用它创建的队列和存储库来接收消息。 这就是为什么从节点也能发消息的原因。即使在从节点宕机后,其他节点也显示队列down状态,因为它们仍然可以使用主节点创建的队列和存储库。