扇出交换基本上是负载均衡器,对吧?
Fanout exchanges are basically load balancers right?
我一直在使用 rabbitMQ 学习 AMQP,我遇到了这个称为扇出交换的概念。从插图中,我只能看到它是某种负载均衡器。谁能解释一下它的实际目的是什么?
我假设你的意思是一旦消息到达扇出交换,只有一个队列会收到消息。所以从这个角度来看:
不,我不认为它是负载平衡器(我承认术语可能会造成混淆)。
Rabbit MQ中有不同类型的exchange,它的true和fanout exchange只是其中的一种。 Rabbit MQ 的基本模型假定您可以将任意数量的队列连接到同一个交换器。现在,连接到交换器的所有队列都将收到消息(Rabbit MQ 只是复制消息)——所以交换器不能充当负载均衡器。
交换类型之间的唯一区别是匹配路由密钥的算法。它就像普通信封中的 "to" 字段。当消息到达交换器时,它会检查路由键(a.k.a。绑定)并根据交换器的类型 "finds" 将消息路由到哪个队列。
当队列注册到交换时,它总是使用这个绑定。它就像队列对绑定 "hey, all messages which are supposed to arrive to John Smith (its a routing key), please pass them to me" 说的那样。然后当消息到达时,它总是在信封中有一个 "to" 字段 - 因此交换检查消息是否打算发送给 John Smith,如果是 - 只是将它路由到队列。
可能会有很多队列对从 John Smith 获取消息感兴趣,在这种情况下,消息将被复制。至于扇出交换 - 它只是不关注路由键,而是将消息发送到所有连接的队列。
现在,还有另一种抽象称为消费者。消费者可以连接到单个队列(同样,许多消费者可以连接到队列)。
诀窍是一次只有一个消费者可以获取要处理的消息。
所以如果你想要一个负载均衡器 - 你可以使用一个队列,连接到你的交换器(当然它可以是扇出),但是然后将许多消费者连接到那个队列,并且兔子将消息发送到第一个消费者(它在内部使用循环法来选择第一个消费者)——如果消费者不能处理它,消息将被重新排队,兔子将尝试将它发送给另一个消费者。
我一直在使用 rabbitMQ 学习 AMQP,我遇到了这个称为扇出交换的概念。从插图中,我只能看到它是某种负载均衡器。谁能解释一下它的实际目的是什么?
我假设你的意思是一旦消息到达扇出交换,只有一个队列会收到消息。所以从这个角度来看:
不,我不认为它是负载平衡器(我承认术语可能会造成混淆)。
Rabbit MQ中有不同类型的exchange,它的true和fanout exchange只是其中的一种。 Rabbit MQ 的基本模型假定您可以将任意数量的队列连接到同一个交换器。现在,连接到交换器的所有队列都将收到消息(Rabbit MQ 只是复制消息)——所以交换器不能充当负载均衡器。
交换类型之间的唯一区别是匹配路由密钥的算法。它就像普通信封中的 "to" 字段。当消息到达交换器时,它会检查路由键(a.k.a。绑定)并根据交换器的类型 "finds" 将消息路由到哪个队列。 当队列注册到交换时,它总是使用这个绑定。它就像队列对绑定 "hey, all messages which are supposed to arrive to John Smith (its a routing key), please pass them to me" 说的那样。然后当消息到达时,它总是在信封中有一个 "to" 字段 - 因此交换检查消息是否打算发送给 John Smith,如果是 - 只是将它路由到队列。
可能会有很多队列对从 John Smith 获取消息感兴趣,在这种情况下,消息将被复制。至于扇出交换 - 它只是不关注路由键,而是将消息发送到所有连接的队列。
现在,还有另一种抽象称为消费者。消费者可以连接到单个队列(同样,许多消费者可以连接到队列)。 诀窍是一次只有一个消费者可以获取要处理的消息。
所以如果你想要一个负载均衡器 - 你可以使用一个队列,连接到你的交换器(当然它可以是扇出),但是然后将许多消费者连接到那个队列,并且兔子将消息发送到第一个消费者(它在内部使用循环法来选择第一个消费者)——如果消费者不能处理它,消息将被重新排队,兔子将尝试将它发送给另一个消费者。