28

为什么我们需要路由键来将消息从交换机路由到队列?我们不能简单地使用队列名称来路由消息吗?此外,在发布到多个队列的情况下,我们可以使用多个队列名称。谁能指出我们实际上需要路由键和队列名称还不够的情况?

4

2 回答 2

20

有几种类型的交换。交换器fanout忽略路由键并将消息发送到所有队列。但几乎所有其他交换类型都使用路由键来确定哪个队列(如果有)将接收消息。

RabbitMQ 网站上的教程描述了几种不同交换类型有用的用例以及路由密钥相关的用例。

例如,教程 5演示了如何使用topic交换器根据每条消息的日志级别将日志消息路由到不同的队列。

如果您想定位多个队列,您需要将它们绑定到一个fanout交换并在您的发布者中使用该交换。

您不能在发布者中指定多个队列名称。在 AMQP 中,您不会将消息发布到队列,而是将消息发布到交换。确定相关队列是交易所的责任。消息可能根本没有路由到任何队列而只是被丢弃。

于 2016-03-30T08:55:08.737 回答
8

将队列名称与应用程序分离有助于提高灵活性。

  • 您可以建立多个队列来使用相同的消息,但队列不能具有相同的名称。

  • 在某些情况下,消息的发起者不知道队列的名称。(例如当您在水平扩展服务器时随机生成队列名称时)

  • 交换可能会为不止一种类型的消费者路由消息。然后,您需要在路由键中使用一些通配符来将消息路由到相关的消费者。

于 2019-01-10T11:00:06.623 回答