我有一个关于RabbitMQ中路由键和绑定键的问题。据我所知,生产者发送一条消息到一个带有路由键的交换机。队列绑定到带有绑定键的交换机。然而,我遇到了这样的默认交换机键的解释:
每个队列都使用与队列名称相同的路由键自动绑定到默认Exchange。
这句话应该说“绑定键”而不是“路由键”吗?或者这两个术语基本上是等价的?
对我来说,每个队列都绑定到默认的交换,绑定键等于队列名称,这意味着内部情况是这样的:
channel.queueBind(queueName, "", queueName);
字符串
是这样吗?每个队列都绑定到默认的交换机,绑定键与队列名相同。由于默认的交换机只是一个没有名字的直接交换机,它会将路由键与队列的绑定键匹配,如果它们相等,就路由它。我的理解正确吗?“绑定键”和“路由键”这两个术语的使用有点混乱。
2条答案
按热度按时间lyr7nygr1#
简单地说:
*路由键在消息上,
*绑定键在**路由(绑定)**上,
**这是令人困惑的,因为RabbitMQ文档和源代码在引用绑定键时使用了 * 这两个术语 *。
例如,名为
routingKey
的IModel.queueBind()
参数是指定绑定键的位置:字符串
在documentation中,它说:
绑定可以使用一个额外的
routingKey
参数。为了避免与BasicPublish
参数混淆,我们将其称为binding key
。因此,虽然它们确实是不同的,但由于它们的密切关系,有时在引用绑定密钥时使用“路由密钥”。
fnatzsnv2#
绑定键与队列一起使用。它是队列在交换中注册时使用的键。
routing-key与消息一起使用。它是决定此消息应路由到哪个队列的键。消息可以有其他类型的路由标识符,如Topic Exchange中的匹配器。
每个队列都自动绑定到默认交换机,并使用与队列名称相同的路由键。
现在,routing-key和binding-key不是同一个概念。但是,在这里,在默认交换的情况下,绑定键将与队列名称相同。因此,消息也将具有与队列名称相同的routing-key。
所以,
channel. channelBind(“",channelName);
并不是完全正确的做法。然而,这取决于交换的类型,队列将如何绑定到交换。在默认交换的情况下,它与队列的名称绑定,因此它将由RabbitMQ完成。