ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

图解 RabbitMQ 核心概念

2021-06-12 22:32:45  阅读:224  来源: 互联网

标签:Producer Exchange 核心 Broker RabbitMQ 消息 图解 Consumer


RabbitMQ 主要概念

RabbitMQ 是基于 Erlang 实现 AMQP 协议的消息中间件。

RabbitMQ 整体上是一个生产者消费者模型,如下图。

为了便于理解,可以将图中拆分为生产环节和消费环节。

对于生产环节 ,有这3个概念:

Producer: 生产者,将其理解为携带信封的人。

RoutingKey: 邮箱的地址。

Exchange: 邮箱。

三者结合理解起来为:一个携带信封的人,沿着邮箱地址行走,将信投递到某一个邮箱中。

对于消费环节,同样有3个概念:

BindingKey: 收件地址

Queue: 菜鸟驿站

Consumer: 收件人

三者结合起来理解:信件根据收件地址,投递到了某个菜鸟驿站,驿站里存放了各种各样的信件,收件人可以从驿站中取走自己的信件。

以上就是一种比较简单形象地理解生产者消费者模型的方式,有了上面初步的感性认知,那么下面就对于几个角色做更详尽的说明。

Broker

图中虚线框部分,可以将其看作是一个 RabbitMQ 服务实例。

Producer

Producer 负责将消息投递到 Exchange 中,消息的主体是 payload,一般业务数据会以json字符串形式放入 payload 中。

Exchange

Exchange 也称为交换机,在 RabbitMQ 中有四种类型,其中默认为 "direct",另外三种分别是"topic","fanout","head"。交换机需要将消息路由到指定的队列,如果找不到指定的队列,则消息会丢失。路由队列的方法,对于不同类型的交换机,有不同的方式,具体可以参照这里

RoutingKey

Producer 需要指定 RoutingKey 将消息投递到 Exchange 中。

BindingKey

BindingKey 负责将 Exchange 和 Queue 关联起来。

Queue

队列。对于 RabbitMQ 来说,消息主要存储到队列中

消息生产流程

Producer 连接到 Broker,建立一个 Connection,并开启一个 Channel。(需要注意,Connection 可以复用,即一个 Connection 可以建立多个 Channel)。具体细节如图

Producer 将 Protocol Header 0-9-1 报文头部发送到 Broker,后者返回 Connection.Start 表明开始建立连接。

当 Produer 收到 Channel.Open-Ok 时,表明 Channel已建立完毕,可以开始发送消息了。

通过 Basic.Pubish 将消息投递到 Exchange 中。

当需要关闭时,则需要依次关闭 Channel, 和 Connection。

消息消费流程

和生产环境类似,Consumer 首先需要和 Brocker 建立连接,开启通道。

Consumer 向 Broker 发送 Basic.Consume,之后收到来自 Broker的回复 Basic.Consume-Ok,表面准备完成,即将推送消息。(这里注明一下,消费消息存在两种模式,该图场景是使用模式,还有另一种模式是 Consumer 主动向 Broker 拉取消息,而不是建立连接后等待消息的自动推送)

类似于 TCP 连接收到消息后有 ACK 应答,Consumer 消费完消息后,也需要 ACK 告知 Broker 消息已消费,可以从 Queue 中删除。对于实际开发来说,可以设置为自动 ACK,也可以处理完业务后再手动 ACK。

和生产流程,消费完成后,Consumer 和 Broker 断开连接依次经历 Channel 和 Connection 的关闭。

AMQP

AMQP 全称 Advanced Message Queuing Protocol,是一个通信协议。

协议本身包含三层结构

  • Module Layer:位于最顶层,提供一些客户端可调用的指令。
  • Session Layer:中间层,主要处理服务端与客户端的交互通信。
  • Transport Layer: 最底层,主要传输二进制数据流,提供帧处理能力,信道复用等功能。

它的模型架构即上述所演示,涉及 Producer, Consumer,Exchange, Queue 等,报文的交互即上述的两张图。

值得注意的是 AMQP 就类似于 FTP, 属于应用层协议,它规范了消息传递方和接收方的行为,以使消息在不同的具体实现中能够互相识别。

小结

本文通过图解方式,简单介绍了 RabbitMQ 的一些核心概念,熟知这些概念,再查阅相关客户端开发文档,即可快速上手 RabbitMQ 的业务开发。如需再深入,可以进一步阅读以下参考资料。

参考资料

标签:Producer,Exchange,核心,Broker,RabbitMQ,消息,图解,Consumer
来源: https://www.cnblogs.com/yintokey/p/14879186.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有