为什么我们需要路由键来将消息从交换机路由到队列?我们不能直接使用队列名称来路由消息吗?此外,在向多个队列发布时,我们可以使用多个队列名称。有没有人能指出实际上需要路由键而队列名称不足的情况?
交换机有几种类型。 fanout
交换机忽略路由键并将消息发送到所有队列。但几乎所有其他交换机类型都使用路由键确定消息将被发送到哪个(如果有的话)队列。
RabbitMQ 网站上的教程描述了不同交换机类型有用的几种用例以及路由键的相关性。
例如,教程 5演示了如何使用 topic
交换机根据每条消息的日志级别将日志消息路由到不同的队列。
如果您想要针对多个队列进行操作,则需要将它们绑定到一个 fanout
交换机并在发布者中使用该交换机。
无法在发布者中指定多个队列名称。在 AMQP 中,您不会将消息发布到队列,而是将其发布到交换机。交换机负责确定相关队列。有可能消息路由到任何一个队列都没有,直接丢弃。
将队列名称与应用程序解耦,有助于提高灵活性。
你可以建立多个队列来消费同一条消息,但队列的名称不能相同。
在某些情况下,消息的发起者并不知道队列的名称。 (例如,在水平扩展服务器时随机生成队列名称)
一个交换机可能会路由多种类型的消费者的消息。 这时你需要在路由键中使用通配符以将消息路由到相关的消费者。