Rabbitmq 绑定密钥或路由密钥

Rabbitmq 绑定密钥或路由密钥,rabbitmq,Rabbitmq,我对RabbitMQ中的路由密钥和绑定密钥有点怀疑。 我所理解的是,生产者使用“路由密钥”将消息发送到交换机。 队列使用绑定密钥绑定到exchange。 在违约交换的情况下,我遇到了一个类似以下的定义: “每个队列都会使用与队列名称相同的路由密钥自动绑定到默认Exchange。” 所以这里应该是“绑定密钥”而不是路由密钥??还是说术语几乎相同 每个队列都绑定到默认exchange,绑定密钥等于队列名称的意思,在内部是这样的- channel.queueBind(queueName, "", qu

我对RabbitMQ中的路由密钥和绑定密钥有点怀疑。 我所理解的是,生产者使用“路由密钥”将消息发送到交换机。 队列使用绑定密钥绑定到exchange。 在违约交换的情况下,我遇到了一个类似以下的定义: “每个队列都会使用与队列名称相同的路由密钥自动绑定到默认Exchange。”

所以这里应该是“绑定密钥”而不是路由密钥??还是说术语几乎相同

每个队列都绑定到默认exchange,绑定密钥等于队列名称的意思,在内部是这样的-

channel.queueBind(queueName, "", queueName);

这是正确的吗??每个队列都绑定到默认exchange,绑定密钥与队列名称相同。由于默认的交换只是一个没有名称的直接交换,它将把路由密钥与队列的绑定密钥相匹配,并在它们相等时对其进行路由。我的理解正确吗?“绑定密钥”和“路由密钥”这两个术语的使用很少有混淆。

绑定密钥与队列一起使用。它是队列在exchange中注册时使用的密钥

路由密钥与消息一起使用。它是决定此消息应路由到哪个队列的密钥。消息可以有其他类型的标识符用于路由,如主题交换中的匹配器

每个队列都会自动绑定到默认exchange,并使用与队列名称相同的路由密钥

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

所以

channel.queueBind(queueName,“,queueName)

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

简而言之:

  • 路由键消息
  • 绑定键位于路由(绑定)
  • 交换将消息路由密钥与每个路由的绑定密钥进行比较,以确定是否应将消息发送到该路由上的队列
这令人困惑,因为RabbitMQ文档和源代码在引用绑定密钥时同时使用这两个术语。

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

void QueueBind(string queue, string exchange, string routingKey, IDictionary<string, object> arguments);
void QueueBind(字符串队列、字符串交换、字符串路由键、IDictionary参数);
在报告中,它说:

绑定可以使用额外的
routingKey
参数。避开 与
BasicPublish
参数混淆,我们将其称为
绑定键

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