绑定密钥或路由密钥

meg*_*gna 9 rabbitmq

我有一个关于 RabbitMQ 中的路由键与绑定键的问题。据我了解,生产者使用路由键向交换器发送消息。队列通过绑定键绑定到交换器。但是,我遇到了默认交换密钥的解释:

每个队列都会使用与队列名称相同的路由键自动绑定到默认 Exchange。

该声明应该说“绑定密钥”而不是“路由密钥”吗?或者这些术语基本上是等同的?

对我来说,每个队列都绑定到默认交换,绑定键等于队列名称,这意味着在内部是这样的:

channel.queueBind(queueName, "", queueName);
Run Code Online (Sandbox Code Playgroud)

它是否正确?每个队列都使用与队列名称相同的绑定键绑定到默认交换器。由于默认交换器只是一个没有名称的直接交换器,因此它会将路由键与队列的绑定键进行匹配,如果相等则路由它。我的理解正确吗?“绑定密钥”和“路由密钥”这两个术语的使用有点令人困惑。

Jos*_*hee 12

简而言之:

  • 路由键位于消息上,
  • 绑定键位于路由(绑定)上,
  • 交换器将消息的路由键与每个路由的绑定键进行比较,以确定是否应将消息发送到该路由上的队列。

这很令人困惑,因为 RabbitMQ 文档和源代码在引用绑定密钥时使用这两个术语。

例如,IModel.queueBind()named 参数routingKey是您指定绑定键的位置:

void QueueBind(string queue, string exchange, string routingKey, IDictionary<string, object> arguments);
Run Code Online (Sandbox Code Playgroud)

文档中,它说:

绑定可以采用额外的routingKey参数。为了避免与参数混淆,BasicPublish我们将其称为 a binding key

因此,虽然它们确实不同,但由于它们的密切关系,有时在引用绑定键时会使用“路由键” 。


Kum*_*kit 9

绑定密钥与队列一起使用。它是队列在交换器中注册的密钥。

路由密钥与消息一起使用。它是决定该消息应路由到哪个队列的关键。消息可以具有其他类型的路由标识符,例如 Topic Exchange 中的匹配器。

每个队列都会使用与队列名称相同的路由键自动绑定到默认交换器。

现在,routing-key 和 Binding-key 不是同一个概念。但是,在默认交换的情况下,绑定键将与队列的名称相同。因此,消息也将具有与队列名称相同的路由键。

所以,

通道.queueBind(queueName, "", 队列名称);

这并不完全是正确的做法。但是,这取决于交换器的类型以及队列如何绑定到交换器。在默认交换的情况下,它与队列的名称绑定,因此将由RabbitMQ完成。