0


RabbitMQ 基础介绍

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 机制的理解。

标签: rabbitmq

本文转载自: https://blog.csdn.net/weixin_45526912/article/details/135111555
版权归原作者 小猪@笨笨 所有, 如有侵权,请联系我们删除。

“RabbitMQ 基础介绍”的评论:

还没有评论