Rabbitmq 扇出交换基本上是负载平衡器,对吗?

Rabbitmq 扇出交换基本上是负载平衡器,对吗?,rabbitmq,amqp,Rabbitmq,Amqp,我一直在使用rabbitMQ学习AMQP,我遇到了这个称为扇出交换的概念。从图示中,我所能看到的是它是一种负载平衡器。有人能解释一下它的实际用途吗? 我假设您的意思是,只有一个队列在到达扇出交换时才会收到消息。因此,从这个角度来看: 不,我不认为它是一个负载平衡器(我承认这个术语可能会让人困惑) 在Rabbit MQ中有不同类型的交换,其true和fanout交换只是其中的一种类型。Rabbit MQ的基本模型假定可以将任意多个队列连接到同一个exchange。现在,所有连接到exchange的

我一直在使用rabbitMQ学习AMQP,我遇到了这个称为扇出交换的概念。从图示中,我所能看到的是它是一种负载平衡器。有人能解释一下它的实际用途吗?

我假设您的意思是,只有一个队列在到达扇出交换时才会收到消息。因此,从这个角度来看:

不,我不认为它是一个负载平衡器(我承认这个术语可能会让人困惑)

在Rabbit MQ中有不同类型的交换,其true和fanout交换只是其中的一种类型。Rabbit MQ的基本模型假定可以将任意多个队列连接到同一个exchange。现在,所有连接到exchange的队列都将获得该消息(Rabbit MQ只是复制该消息)——因此exchange不能充当负载平衡器

交换类型之间的唯一区别是匹配路由密钥的算法。它就像一个普通信封中的“to”字段。当消息到达exchange时,它会检查路由密钥(也称为绑定),并根据exchange的类型“查找”消息应路由到的队列。 当队列注册到exchange时,它总是使用此绑定。这就像队列对绑定说的“嘿,所有应该到达John Smith的消息(这是一个路由密钥),请将它们传递给我”。然后,当消息到达时,信封中总是有一个“to”字段,因此exchange会检查消息是否打算发送给John Smith,如果是,则将其路由到队列

可能会有许多队列对从John Smith获取消息感兴趣,在这种情况下,消息将被复制。至于fanoutexchange,它只是不注意路由密钥,而是将消息发送到所有连接的队列

现在,有另一种抽象称为消费者。消费者可以连接到单个队列(同样,许多消费者可以连接到队列)。 诀窍在于,一次只有一个消费者可以获得要处理的消息

因此,如果您想要一个负载平衡器,您可以使用一个连接到exchange的队列(当然可以是扇出队列),然后将多个使用者连接到该队列,rabbit将向第一个使用者发送消息(它在内部使用循环选择第一个使用者)-如果使用者无法处理它,消息将重新排队,rabbit将尝试将其发送给另一个消费者