对于RabbitMQ中的路由密钥和绑定密钥,我有一个小小的疑问。我所理解的是,生产者用“路由密钥”向交换发送消息。使用绑定密钥将队列绑定到exchange。在默认交换的情况下,我遇到了这样的定义:“每个队列都使用与队列名称相同的路由密钥自动绑定到默认exchange。”
所以这里应该是“绑定密钥”而不是路由密钥吗??还是这些条款几乎一样?
每个队列都绑定到默认交换,其绑定键等于队列名,在内部是这样的-
channel.queueBind(queueName, "", queueName);这样说对吗?每个队列都绑定到与队列名称相同的绑定键的默认exchange。由于默认交换只不过是一个没有名称的直接交换,所以它将把路由密钥与队列的绑定密钥匹配起来,如果它们是equal..Am,我的理解是正确的?“绑定密钥”和“路由密钥”这两个术语的使用并不令人困惑。
发布于 2019-01-09 10:59:09
绑定键与队列一起使用。它是在交换中注册队列的密钥。
路由密钥与消息一起使用。它将决定这个消息应该路由到哪个队列。消息可以具有用于路由的其他类型的标识符,如主题交换中的匹配符。
每个队列都使用与队列名称相同的路由密钥自动绑定到默认交换。
现在,路由密钥和绑定密钥不是相同的概念。但是,在默认Exchange的情况下,绑定键将与队列的名称相同。因此,消息也将具有与队列名称相同的路由密钥。
所以,
channel.queueBind(queueName,"",queueName);
并不是正确的做法。但是,这取决于交换的类型,队列将如何绑定到交换。在默认交换的情况下,它与队列的名称绑定,因此它将由RabbitMQ完成。
发布于 2020-07-23 17:35:49
简而言之:
--这让人困惑,因为RabbitMQ文档和源代码在引用绑定键.时都使用和两个术语。
例如,名为IModel.queueBind()的routingKey参数是您指定绑定键的地方:
void QueueBind(string queue, string exchange, string routingKey, IDictionary<string, object> arguments);在文档中,它说:
绑定可以采用额外的
routingKey参数。为了避免与BasicPublish参数混淆,我们将它称为binding key。
因此,虽然确实是不同的,但由于它们之间的密切关系,有时在引用绑定密钥时使用“路由密钥”。
https://stackoverflow.com/questions/50502280
复制相似问题