美文网首页
RabbitMQ(一)、基础介绍

RabbitMQ(一)、基础介绍

作者: 上善丨若水 | 来源:发表于2020-12-29 15:56 被阅读0次

    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 (消费者客户端):

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

    RabbitMQ Broker (RabbitMQ 服务端):

    从 Consumer 接收申明指令创建 Exchange 和 绑定 Queue 到 Exchange
    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://www.haomeiwen.com/subject/pvafoktx.html