rabbitmq 绑定键或路由键

bxfogqkk  于 2023-11-19  发布在  RabbitMQ
关注(0)|答案(2)|浏览(182)

我有一个关于RabbitMQ中路由键和绑定键的问题。据我所知,生产者发送一条消息到一个带有路由键的交换机。队列绑定到带有绑定键的交换机。然而,我遇到了这样的默认交换机键的解释:
每个队列都使用与队列名称相同的路由键自动绑定到默认Exchange。
这句话应该说“绑定键”而不是“路由键”吗?或者这两个术语基本上是等价的?
对我来说,每个队列都绑定到默认的交换,绑定键等于队列名称,这意味着内部情况是这样的:

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

字符串
是这样吗?每个队列都绑定到默认的交换机,绑定键与队列名相同。由于默认的交换机只是一个没有名字的直接交换机,它会将路由键与队列的绑定键匹配,如果它们相等,就路由它。我的理解正确吗?“绑定键”和“路由键”这两个术语的使用有点混乱。

lyr7nygr

lyr7nygr1#

简单地说:

*路由键消息上,
*绑定键在**路由(绑定)**上,

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

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

void QueueBind(string queue, string exchange, string routingKey, IDictionary<string, object> arguments);

字符串
documentation中,它说:
绑定可以使用一个额外的routingKey参数。为了避免与BasicPublish参数混淆,我们将其称为binding key

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

fnatzsnv

fnatzsnv2#

绑定键与队列一起使用。它是队列在交换中注册时使用的键。
routing-key与消息一起使用。它是决定此消息应路由到哪个队列的键。消息可以有其他类型的路由标识符,如Topic Exchange中的匹配器。
每个队列都自动绑定到默认交换机,并使用与队列名称相同的路由键。
现在,routing-key和binding-key不是同一个概念。但是,在这里,在默认交换的情况下,绑定键将与队列名称相同。因此,消息也将具有与队列名称相同的routing-key。
所以,
channel. channelBind(“",channelName);
并不是完全正确的做法。然而,这取决于交换的类型,队列将如何绑定到交换。在默认交换的情况下,它与队列的名称绑定,因此它将由RabbitMQ完成。

相关问题