我有一个关于 RabbitMQ 中的路由键与绑定键的问题。据我了解,生产者使用路由键向交换器发送消息。队列通过绑定键绑定到交换器。但是,我遇到了默认交换密钥的解释:
每个队列都会使用与队列名称相同的路由键自动绑定到默认 Exchange。
该声明应该说“绑定密钥”而不是“路由密钥”吗?或者这些术语基本上是等同的?
对我来说,每个队列都绑定到默认交换,绑定键等于队列名称,这意味着在内部是这样的:
channel.queueBind(queueName, "", queueName);
Run Code Online (Sandbox Code Playgroud)
它是否正确?每个队列都使用与队列名称相同的绑定键绑定到默认交换器。由于默认交换器只是一个没有名称的直接交换器,因此它会将路由键与队列的绑定键进行匹配,如果相等则路由它。我的理解正确吗?“绑定密钥”和“路由密钥”这两个术语的使用有点令人困惑。
Jos*_*hee 12
简而言之:
这很令人困惑,因为 RabbitMQ 文档和源代码在引用绑定密钥时使用这两个术语。
例如,IModel.queueBind()named 参数routingKey是您指定绑定键的位置:
void QueueBind(string queue, string exchange, string routingKey, IDictionary<string, object> arguments);
Run Code Online (Sandbox Code Playgroud)
在文档中,它说:
绑定可以采用额外的
routingKey参数。为了避免与参数混淆,BasicPublish我们将其称为 abinding key。
因此,虽然它们确实不同,但由于它们的密切关系,有时在引用绑定键时会使用“路由键” 。
绑定密钥与队列一起使用。它是队列在交换器中注册的密钥。
路由密钥与消息一起使用。它是决定该消息应路由到哪个队列的关键。消息可以具有其他类型的路由标识符,例如 Topic Exchange 中的匹配器。
每个队列都会使用与队列名称相同的路由键自动绑定到默认交换器。
现在,routing-key 和 Binding-key 不是同一个概念。但是,在默认交换的情况下,绑定键将与队列的名称相同。因此,消息也将具有与队列名称相同的路由键。
所以,
通道.queueBind(queueName, "", 队列名称);
这并不完全是正确的做法。但是,这取决于交换器的类型以及队列如何绑定到交换器。在默认交换的情况下,它与队列的名称绑定,因此将由RabbitMQ完成。
| 归档时间: |
|
| 查看次数: |
9593 次 |
| 最近记录: |