首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定密钥或路由密钥

绑定密钥或路由密钥
EN

Stack Overflow用户
提问于 2018-05-24 06:20:37
回答 2查看 5.9K关注 0票数 6

对于RabbitMQ中的路由密钥和绑定密钥,我有一个小小的疑问。我所理解的是,生产者用“路由密钥”向交换发送消息。使用绑定密钥将队列绑定到exchange。在默认交换的情况下,我遇到了这样的定义:“每个队列都使用与队列名称相同的路由密钥自动绑定到默认exchange。”

所以这里应该是“绑定密钥”而不是路由密钥吗??还是这些条款几乎一样?

每个队列都绑定到默认交换,其绑定键等于队列名,在内部是这样的-

代码语言:javascript
复制
channel.queueBind(queueName, "", queueName);

这样说对吗?每个队列都绑定到与队列名称相同的绑定键的默认exchange。由于默认交换只不过是一个没有名称的直接交换,所以它将把路由密钥与队列的绑定密钥匹配起来,如果它们是equal..Am,我的理解是正确的?“绑定密钥”和“路由密钥”这两个术语的使用并不令人困惑。

EN

回答 2

Stack Overflow用户

发布于 2019-01-09 10:59:09

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

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

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

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

所以,

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

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

票数 6
EN

Stack Overflow用户

发布于 2020-07-23 17:35:49

简而言之:

  • 路由密钥messages上,
  • 绑定键路由(绑定)上,
  • Exchange将消息路由密钥与每个路由的绑定密钥进行比较,以确定是否应将消息发送到该路由上的队列。

--这让人困惑,因为RabbitMQ文档和源代码在引用绑定键.时都使用和两个术语。

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

代码语言:javascript
复制
void QueueBind(string queue, string exchange, string routingKey, IDictionary<string, object> arguments);

文档中,它说:

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50502280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档