RabbitMQ 快速入门

🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨

🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖

🎉希望我们在一篇篇的文章中能够共同进步!!!

🌈个人主页:AUGENSTERN_dc

🔥个人专栏:C语言 |Java | 数据结构 | 算法 | MySQL | RabbitMQ | Redis

⭐个人格言:

一重山有一重山的错落,我有我的平仄

一笔锋有一笔锋的着墨,我有我的舍得


目录

[1. 生产者消费者模型:](#1. 生产者消费者模型:)

[1.1 什么是生产者消费者模型?](#1.1 什么是生产者消费者模型?)

[2. RabbitMQ快速入门](#2. RabbitMQ快速入门)

[2.1 Producer, Consumer, Broker](#2.1 Producer, Consumer, Broker)

[2.2 Connection, Channel](#2.2 Connection, Channel)

[2.3 Virtural host](#2.3 Virtural host)

[2.4 Queue](#2.4 Queue)

[2.5 Exchange](#2.5 Exchange)

[3. RabbitMQ工作流程](#3. RabbitMQ工作流程)

[4. AMQP](#4. AMQP)


1. 生产者消费者模型:

1.1 什么是生产者消费者模型?

生产者消费者模型是一种并发编程模式用于解决生产者和消费者之间的数据交换与同步问题。在这个模型中,生产者负责生成数据并放入共享的数据缓冲区,而消费者则负责从数据缓冲区中取出数据并进行处理。生产者和消费者之间通过共享的数据缓冲区进行通信,这个缓冲区通常是一个队列或者缓冲池

例如, 在一个餐厅中, 厨师不停的为客人做饭, 不断的有客人点单同时吃饭, 厨师做好的菜就让服务员端到客人的餐桌上

在上述例子中, 厨师就是一个生产者, 客人是消费者, 而服务员就是共享的数据缓冲区

RabbitMQ是一个消息中间件, 也是一个生产者消费者模型, 他负责接收, 存储闭并转发消息.

消息传递的过程类似于送快递,

2. RabbitMQ快速入门

2.1 Producer, Consumer, Broker

Producer: 生产者, 是RabbitMQ Server 的客户端, 像RabbitMQ发送消息

⽣产者(Producer)创建消息, 然后发布到RabbitMQ中. 在实际应⽤中, 消息通常是⼀个带有⼀定业务逻辑结构的数据, ⽐如JSON字符串. 消息可以带有⼀定的标签, RabbitMQ会根据标签进⾏路由, 把消息发送给感兴趣的消费者(Consumer).

Consumer: 消费者, 也是RabbitMQ Server的客⼾端, 从RabbitMQ接收消息

消费者连接到RabbitMQ服务器, 就可以消费消息了, 消费的过程中, 标签会被丢掉. 消费者只会收到消息, 并不知道消息的⽣产者是谁, 当然消费者也不需要知道.

Broker:其实就是RabbitMQ Server, 主要是接收和收发消息

对于RabbitMQ来说,⼀个RabbitMQ Broker可以简单地看作⼀个RabbitMQ服务节点, 或者RabbitMQ服务实例. ⼤多数情况下也可以将⼀个RabbitMQ Broker看作⼀台RabbitMQ服务器

2.2 Connection, Channel

Connection: 连接. 是客⼾端和RabbitMQ服务器之间的⼀个TCP连接. 这个连接是建⽴消息传递的基础, 它负责传输客⼾端和服务器之间的所有数据和控制信息.

Channel: 通道, 信道. Channel是在Connection之上的⼀个抽象层. 在 RabbitMQ 中, ⼀个TCP连接可以有多个Channel, 每个Channel 都是独⽴的虚拟连接. 消息的发送和接收都是基于 Channel的.

通道的主要作用是将消息的读写操作复用到同一个TCP连接上, 这样可以减少关闭连接的开销, 提高性能

2.3 Virtural host

Virtual host: 虚拟主机. 这是⼀个虚拟概念. 它为消息队列提供了⼀种逻辑上的隔离机制. 对于RabbitMQ⽽⾔, ⼀个 BrokerServer 上可以存在多个 Virtual Host. 当多个不同的⽤⼾使⽤同⼀个 RabbitMQ Server 提供的服务时,可以虚拟划分出多个 vhost,每个⽤⼾在⾃⼰的 vhost 创建 exchange/queue 等

者类似于mysql中的database, 是一个逻辑上的集合, 一个Mysql服务器可以有多个database

2.4 Queue

Queue: 队列, 是RabbitMQ的内部对象, ⽤于存储消息

多个消费者可以订阅多个队列

2.5 Exchange

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

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

类似于厨师做好菜, 让服务员端走, 具体把这盘菜放到那一桌上, 就是服务员做的

3. RabbitMQ工作流程

理解了上⾯的概念之后, 再来回顾⼀下这个图, 来看RabbitMQ的⼯作流程

  1. Producer ⽣产了⼀条消息

  2. Producer 连接到RabbitMQBroker, 建⽴⼀个连接(Connection),开启⼀个信道(Channel)

  3. Producer 声明⼀个交换机(Exchange), 路由消息

  4. Producer 声明⼀个队列(Queue), 存放信息

  5. Producer 发送消息⾄RabbitMQ Broker

  6. RabbitMQ Broker 接收消息, 并存⼊相应的队列(Queue)中, 如果未找到相应的队列, 则根据⽣产者的配置, 选择丢弃或者退回给⽣产者

如果我们把RabbitMQ⽐作⼀个物流公司,那么它的⼀些核⼼概念可以这样理解:

  1. Broker就类似整个物流公司的总部, 它负责协调和管理所有的物流站点, 确保包裹安全、⾼效地送达.

  2. Virtual Host可以看作是物流公司为不同的客⼾或业务部⻔划分的独⽴运营中⼼. 每个运营中⼼都有⾃⼰的仓库(Queue), 分拣规则(Exchange)和运输路线(Connection和Channel), 这样可以确保不同客⼾的包裹处理不会相互⼲扰, 同时提供定制化的服务

  3. Exchange就像是站点⾥的分拣中⼼. 当包裹到达时, 分拣中⼼会根据包裹上的标签来决定这个包裹应该送往哪个⽬的地(队列). 快递站点可能有不同类型的分拣中⼼, 有的按照具体地址分拣, 有的将包裹复制给多个收件⼈等

  4. Queue就是快递站点⾥的⼀个个仓库, ⽤来临时存放等待派送的包裹. 每个仓库都有⼀个或多个快递员(消费者)负责从仓库中取出包裹并派送给最终的收件⼈.

  5. Connection就像是快递员与快递站点之间的通信线路. 快递员需要通过这个线路来接收派送任务(消息).

  6. Channel就像是快递员在执⾏任务时使⽤的多个并⾏的通信线路. 这样,快递员可以同时处理多个包裹, ⽐如⼀边派送包裹, ⼀边接收新的包裹

4. AMQP

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

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

相关推荐
huaqianzkh6 小时前
RabbitMq的Java项目实践
java·中间件·rabbitmq
huaqianzkh9 小时前
了解RabbitMQ:强大的开源消息队列中间件
中间件·系统架构·rabbitmq
C1829818257511 小时前
Spring Boot 的自动配置,以rabbitmq为例,请详细说明
spring boot·rabbitmq·java-rabbitmq
龙少954312 小时前
【什么是中间件】
中间件
H4_9Y12 小时前
呼叫中心中间件实现IVR进入排队,判断排队超时播放提示音
中间件
西瓜味儿的小志17 小时前
Kafka为什么快(高性能的原因)
分布式·中间件·kafka
Tomorrow'sThinker17 小时前
博客标题:使用Go和RabbitMQ构建高效的消息队列系统
开发语言·golang·rabbitmq
不能再留遗憾了20 小时前
SpringBoot整合RabbitMQ
spring boot·rabbitmq·java-rabbitmq
纯净的灰〃21 小时前
常见中间件漏洞(tomcat,weblogic,jboss,apache)
安全·web安全·网络安全·中间件
西瓜味儿的小志1 天前
Kafka的rebalance机制
分布式·中间件·kafka