清淨
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • RabbitMQ

    • 简介
    • 安装
    • 快速开始
    • 工作模式
    • 交换机
    • 队列
    • Bindings
    • 消息
    • Ack 与 Confirms
    • 集群
    • 拓展

      • 死信
      • TTL
      • Queue Length Limit
    • 插件

      • 延迟消息
    • 整合 Spring Boot
    • 生产环境

Bindings

参考

Bindings

bindings

在 Publish/Subscribe 中,我们已经创建了 fanout 交换机和队列。现在我们需要告诉交换机将消息发送到我们的队列。交换机和队列之间的关系称为绑定(Bindings)。

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

从现在开始,logs 交换机会将消息加到我们的队列中。

提示

想要查看 RabbitMQ 中的绑定,可以使用如下命令:

sudo rabbitmqctl list_bindings

在 Publish/Subscribe 中,我们已经创建了绑定。您可能还记得这样的代码:

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

绑定是交换机和队列之间的关系。这可以简单地理解为:队列对来自此交换机的消息感兴趣。

绑定可以采用额外的 routingKey 参数。为了避免与 basic_publish 参数混淆,我们将其称为 binding key。下面是我们如何创建带有键的绑定:

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

binding key 的含义取决于交换机类型。我们之前使用的 fanout 交换机完全忽略了 binding key。

注意

请先查看 Topics。

你可能已经注意到了,在本节中,我们提到了 binding key 和 routing key,其实早在 交换机 一节中,我们提就到了 routing key 和 routing key,当时我们的解释是 "它们是同一个概念,只是在不同的上下文中使用不同的名称。",现在我们可以给出更加准确的解释了。

从本质上来讲,binding key 和 routing key 确实是同一个概念,并且 RabbitMQ 的 API 中也只有 routingKey 这个参数,并没有出现 bindingKey。

binding key 是针对消费者来讲的,我们都知道,消费者最终其实是监听的队列,而队列是和交换机进行绑定的,binding key 就是用来标识队列和交换机之间的绑定关系的。我们在 RabbitMQ 后台管理界面看到的其实就是这个 binding key。

routing key 是针对生产者来讲的,生产者在发送消息的时候,需要指定 routing key,以便 RabbitMQ 根据这个 routing key 将消息路由到指定的队列中。例如,发送消息时,如果指定的 routingKey 是 *.kern,那么这里的 * 不再具有通配符的含义,而是一个具体的 "单词",就类似于 auth.kern,cron.kern 等。如果这时,消费者定义了一个 bindingKey 为 *.kern,那么这个消费者将会接收到 routingKey 为 *.kern 的消息,因为此处的 * 是通配符,可以匹配任意的单词(此时通配符 * 匹配了单词 "*")。

简而言之,topic 交换机中的通配符只在消费者的 bindingKey 中使用,而不是在生产者的 routingKey 中使用,生产者的 routingKey 不具有通配符的含义。

想要编辑此页?
上次更新: 2023/12/13 23:23
贡献者: Junfeng Dai
←队列消息→
[ 纸上得来终觉浅绝知此事要躬行 ]
Copyright © 2021-present Junfeng Dai
蜀ICP备2021009537号