上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

RabbitMQ 基础介绍

guduadmin23小时前

RabbitMQ 基础介绍

TL;DR

RabbitMQ 是一个默认基于 AMQP 协议的消息队列系统,本文解释介绍 RabbitMQ 的基础概念、数据传输机制和流程,帮助快速了解 RabbitMQ 和进行相关开发。本文重点在解释什么是 RabbitMQ、RabbitMQ 是如何运行的。至于为什么使用消息队列?为什么使用 RabbitMQ?请参考其他文章。

概念

  • Producer (生产者): 发送消息的应用。
  • Consumer (消费者): 接收消息的应用。
  • Queue (队列): 存储消息的缓冲区。
  • Message (消息): Producer 通过 RabbitMQ 发送给 Consumer 的信息。
  • Connection (连接): 应用和 RabbitMQ 之间的 TCP 连接。
  • Channel (通道): 连接内部的虚拟连接,当发送或接收 Queue 中的消息时,都是通过通道完成的。
  • Exchange (交换机): 根据 Producer 定义的消息类型规则,接收来自 Producer 的消息并将消息推送到 Queue 中。Exchange 至少要 Binding 一个 Queue,否则默认情况下消息会被丢弃。
  • Binding (绑定): Binding 是 Queue 和 Exchange 之间的连接。
  • Routing key (路由键): Producer 可以发送的额外参数,Exchange 用来确定如何将消息路由到 Queue。
  • AMQP (高级消息 Queue 协议): RabbitMQ 默认的消息协议。
  • Users (用户): RabbitMQ 用户,拥有账号密码、权限、Vhost 权限等。
  • Vhost (虚拟机): 在同一 RabbitMQ 中隔离应用程序的机制。Queue 和 Exchange 存在于虚拟机中,用户可以拥有一个或多个虚拟机权限。

    PUB/SUB 流程

    简要概括

    • Producer 负责推送消息到 Exchange
    • Consumer 负责消费 Queue 的消息
    • Exchange 负责路由消息到 Queue
    • Queue 负责存储消息等待消费

      详细说明

      Producer (生产者客户端):

      1. 创建一个 TCP 连接到 RabbitMQ
      2. 创建一个 Channel 用来发送消息
      3. 发送消息到 Exchange

      Consumer (消费者客户端):

      1. 创建一个 TCP 连接到 RabbitMQ
      2. 创建一个 Channel 用来接收消息
      3. 向 RabbitMQ Broker 申明创建一个 Exchange
      4. 向 RabbitMQ Broker 申明绑定一个 Queue 到 Exchange
      5. 监听消费 Queue 中的消息

      RabbitMQ Broker (RabbitMQ 服务端):

      1. 从 Consumer 接收申明指令创建 Exchange 和 绑定 Queue 到 Exchange
      2. Exchange 从 Producer 接收消息,路由到 Queue

      Queue 参数解析

      • Name 名称
      • Durable 是否在 RabbitMQ 重启之后存在
      • Exclusive 在只有一个连接的时候使用,并且 Queue 会在连接断开的时候删除
      • Auto-delete 如果是 yes,Queue 将在最后一个 Consumer 取消、断开、消失的时候自动删除
      • Arguments 可选,用于一些插件和 RabbitMQ 的功能所使用的参数

        Queue 的类型

        • Classic 常规类型
        • Quorum 新的队列类型,适用于对数据安全、容错方面要求高于低延迟等其他特性的场景。

          Quorum queues are purpose built by design. They are not designed to be used for every problem. Their intended use is for topologies where queues exist for a long time and are critical to certain aspects of system operation, therefore fault tolerance and data safety is more important than, say, low latency and advanced queue features.

          Exchange 参数解析

          • Name 名称
          • Type 类型
          • Durability 是否在 RabbitMQ 重启之后存在
          • Auto-delete 是否在最后一个绑定的 Queue 解绑的时候删除
          • Arguments 可选,用于一些插件和 RabbitMQ 的功能所使用的参数
          • Internal: 默认 false,如果是 yes 则 Exchange 只能够在绑定的 Exchange 之间传递消息

            Exchange 的类型

            • Direct: 消息的 Routing key 和 Queue 的 Binding key 匹配一致, 消息会路由到对应的 Queue 中。
            • Fanout: Fanout 模式的 Exchange 会发送消息给所有绑定的 Queue。
            • Topic: Topic 模式的 Exchange 会对 Routing key 进行设定好的路由规则验证,路由消息到指定的一个或多个 Queue 中。
            • Headers: 使用 Message header 的属性来作为路由参数。

              常见问题

              Q:推送消息的时候如何保证有对应的 Exchange 和 Queue?

              A:Producer 和 Consumer 客户端处理这种问题的时候,双方都会向 RabbitMQ Broker 申明创建 Exchange 和 Queue 以保证消息传输过程通达。

              Q:如何选择合适的模式?

              A:在了解完 RabbitMQ Exchange 的特性之后,我们可以参考一些最佳实践来选择符合我们使用场景的类型。目前比较符合我们微服务结构下的 PUB/SUB 机制的类型是 Exchange Fanout。为什么选用这个模式,是因为这种类型的申明字段结构比较清晰,不容易因为复杂的路由规则而犯错,而且符合我们对 PUB/SUB 机制的理解。

网友评论

搜索
最新文章
热门文章
热门标签