为什么我们需要在rabbitmq中使用路由键

时间:2016-03-30 07:30:45

标签: rabbitmq rabbitmq-exchange rabbitmqctl

我想知道为什么我们需要routing key将消息从exchange路由到队列。我们不能使用简单队列名来路由消息。此外,在发布到多个队列的情况下,我们可以使用多个队列名称。任何人都可以指出我们实际需要路由密钥的场景,队列名称是不够的。

2 个答案:

答案 0 :(得分:6)

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

tutorials on the RabbitMQ website描述了几个用例,其中不同的交换类型很有用,并且路由密钥是相关的。

例如,tutorial 5演示了如何使用主题交换将日志消息路由到不同的队列,具体取决于每条消息的日志级别。

如果您要定位多个队列,则需要将它们绑定到扇出交换并在发布商中使用该交换。

您无法在发布商中指定多个队列名称。在AMQP中,您不向队列发布消息,而是将消息发布到交换机。这是确定相关队列的交换责任。消息可能根本没有路由到任何队列而只是丢弃。

答案 1 :(得分:1)

从应用程序中解耦队列名称对于提高灵活性很有用。

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

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

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