当前位置: 首页 > news >正文

RabbitMQ概述

简介

MQ 本质上就是一个队列,MQ (Message Queue)是消息队列,可以存放各式各样的消息,如:字符串、JSON、内嵌对象等等

MQ 在市面上右很多产品:如 Kafka (常用于日志的采集)
RocketMQ(采用Java语言开发,由阿里巴巴开源)
RabbitMQ(采用 Erlang 语言开发)

在本专栏里主要介绍RabbitMQ

RabbitMQ 的官网地址:https://www.rabbitmq.com/

核心概念

Producer 表示生产者,是RabbitMQ 的客户端,用于发送消息
Consumer 表示消费者,是RabbitMQ 的客户端,用户接收消息
Broker 表示 RabbitMQ Server,主要用于接收和发送消息
在这里插入图片描述

Connection : 连接,是客户端和RabbitMQ 的一个TCP 连接,这个连接是建立在消息传递的基础上,负责客户端和服务器之间所有的数据和控制信息
Channel:通道,信道,Channel 是 Connection 之上的一个抽象层,在RabbitMQ,一个TCP 连接可以由多个Channel ,每个 Channel 都是独立的虚拟连接,消息的发送和接收都是基于Channel 的
通道的主要作用就是将消息的读写操作复用在同一个TCP 连接上,这样就可以减少和关闭连接的开销了,提高性能。
在这里插入图片描述

Virtual host :虚拟主机,一个BrokerServer 上可以存在多个虚拟主机,这个可以类比MySQL数据库里面可以创建出多个数据库。

Queue: 队列,是RabbitMQ 的内部对象,用于存储消息:
在这里插入图片描述
多个消费者可以订阅同一个队列,同理,多个生产者也可以向同一个队列发送消息
在这里插入图片描述


Exchange :交换机,当 message 到达 broker 的第一站的时候,Exchange 负责接收生产者发送的消息,并根据特定的规则把这些消息路由到一个或多个Queue 中

Exchange 起到了消息路由的作用,它根据类型和规则来确定如何转发接收消息

在这里插入图片描述


下面的是RabbitMQ的工作流程图,RabbitMQ 是基于生产者消费者模型开发的,负责接收、存储和转发消息

在这里插入图片描述

  1. Producer 生产了⼀条消息
  2. Producer 连接到RabbitMQBroker, 建立⼀个连接(Connection), 开启⼀个信道(Channel)
  3. Producer 声明⼀个交换机(Exchange), 路由消息
  4. Producer 声明⼀个队列(Queue), 存放信息
  5. Producer 发送消息到abbitMQ Broker
  6. RabbitMQ Broker 接收消息, 并存入相应的队列(Queue)中, 如果未找到相应的队列, 则根据生产者的配置, 选择丢弃或者退回给生产者.

AMQP

AMQP(Advanced Message Queuing Protocol)是⼀种⾼级消息队列协议, AMQP定义了⼀套确定的消息交换功能, 包括交换器(Exchange), 队列(Queue)等. 这些组件共同⼯作, 使得⽣产者能够将消息发送到交换器. 然后由队列接收并等待消费者接收. AMQP还定义了⼀个网络协议, 允许客户端应用通过该协议与消息代理和AMQP模型进行交互通信

RabbitMQ是遵从AMQP协议的,换句话说,RabbitMQ就是AMQP协议的Erlang的实现(当然RabbitMQ还支持STOMP2, MQTT2等协议). AMQP的模型结构和RabbitMQ的模型结构是⼀样的.

在这里插入图片描述

相关文章:

  • 编程日志5.8
  • 如何通过partclone克隆Ubuntu 22系统
  • 【hot100-动态规划-139.单词拆分】
  • 使用 GitDiagram 快速将 GitHub 仓库转换为交互式图表
  • LeetCode 45. 跳跃游戏 II(中等)
  • 120页WORD方案 | 2025企业数字化转型AI大模型数字底座项目设计方案
  • 【LeetCode 热题 100】56. 合并区间 —— 一文弄懂排序+遍历经典解法(附Python代码)
  • IPLOOK | 2025 MVNOs 世界大会:从Wi-Fi通话到卫星覆盖
  • Python爬虫第21节- 基础图形验证码识别实战
  • 使用 `perf` 和火焰图(Flame Graph)进行性能分析
  • 随机森林(Random Forest)
  • 使用GmSSL v3.1.1实现SM2证书认证
  • 编译OpenSSL时报错,Can‘t locate IPC/Cmd.pm in @INC perl环境
  • VSCode CMake Debug
  • 蓝桥杯12届国B 完全日期
  • auto.js面试题及答案
  • 右值引用的学习
  • @Controller 与 @RestController-笔记
  • 斜率变化策略
  • 在星河社区学习PARL使用强化学习来训练AI
  • 专家:家长要以身作则,孩子是模仿者学习者有时也是评判者
  • 南京江宁区市监局通报:盒马一批次猕猴桃检出膨大剂超标
  • 四个“从未如此”使巴以加沙战火绵延时间创下历史之最
  • 创同期历史新高!1至4月全国铁路发送旅客14.6亿人次
  • 美国“贸易战”前线的本土受害者:安静的洛杉矶港和准备关门的小公司
  • 普京:俄中关系是国家间关系的真正典范