RabbitMQ-队列 (Queues)

54 阅读3分钟

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:

Web服务器

代理服务器

ZooKeeper

Kafka

RabbitMQ(本章节)

前面的内容,我们介绍了虚拟主机(vhost),但是它只是一个逻辑概念,它必须配合对应的交换机(Exchange),队列(Queue),绑定(Binding)才能具体使用,今天我们再来讲解队列。

队列(Queues)。它是消息传递模型中的目的地,消息最终被存储在这里,等待消费者应用程序来获取和处理。

一、队列的本质:异步缓冲器

想象一个繁忙的快递分拣中心:

  • 生产者(Producer) 是发货方(如电商系统生成订单)

  • 队列(Queue) 是临时仓库(存储待派送包裹)

  • 消费者(Consumer) 是快递员(处理订单配送)

队列的核心作用是解决生产与消费速度不匹配的问题。生产者无需等待消费者处理,只需将消息“扔”进队列即可返回,

二、消息队列的核心功能

  1. **异步解耦:**生产者与消费者无需相互感知示例用户注册后,注册服务发消息到队列,邮件服务异步消费发送欢迎邮件,无需阻塞主流程。

  2. **流量削峰:**突发流量写入队列,消费者平稳处理避免后端服务被压垮

    典型场景

    :秒杀系统、日志收集。

  3. **数据持久化:**消息持久化到磁盘(如 RabbitMQ 的 msg_store)即使服务重启,消息不丢失(需配置持久化队列+持久化消息)。

  4. **顺序保证:**单队列内遵循 FIFO(先进先出)优先级队列支持按权重处理(如 VIP 订单优先)。

  5. **负载均衡:**多个消费者并发消费同一队列自动分配消息,最大化资源利用率。

三、队列管理

1.队列和交换机一样也会属于某个交换机。

2.队列的类型(Classic是最常用的队列),不同类型的队列具有不同的属性。

3.队列的名字。

4.是否持久化(Durability代表持久化,重启以后还在)。

5.是否自动删除,当最后一个消费者断开连接时,队列将被自动删除。

其中第四和第五两个组合到一起可以使用,加上我们后面讲的内存节点,就可以适合哪些临时对性能要求比较高的应用。

当然下面还有一堆参数可以对这个队列进行额外附加功能,部分参数将在后面的部分章节进行讲解。

我们已经完成了虚拟主机,交换机,队列的创建,交换机是属于某个虚拟主机,队列也属于某个虚拟主机,但是他们之前还没有办法产生交集,还是平行的两条线,类似下图这样。也是我们下个小节要讲解的内容。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。