作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:
Web服务器
代理服务器
ZooKeeper
Kafka
RabbitMQ(本章节)
前面的内容,我们介绍了虚拟主机(vhost),但是它只是一个逻辑概念,它必须配合对应的交换机(Exchange),队列(Queue),绑定(Binding)才能具体使用,今天我们再来讲解队列。
队列(Queues)。它是消息传递模型中的目的地,消息最终被存储在这里,等待消费者应用程序来获取和处理。
一、队列的本质:异步缓冲器
想象一个繁忙的快递分拣中心:
-
生产者(Producer) 是发货方(如电商系统生成订单)
-
队列(Queue) 是临时仓库(存储待派送包裹)
-
消费者(Consumer) 是快递员(处理订单配送)
队列的核心作用是解决生产与消费速度不匹配的问题。生产者无需等待消费者处理,只需将消息“扔”进队列即可返回,
二、消息队列的核心功能
-
**异步解耦:**生产者与消费者无需相互感知示例用户注册后,注册服务发消息到队列,邮件服务异步消费发送欢迎邮件,无需阻塞主流程。
-
**流量削峰:**突发流量写入队列,消费者平稳处理避免后端服务被压垮
典型场景
:秒杀系统、日志收集。
-
**数据持久化:**消息持久化到磁盘(如 RabbitMQ 的
msg_store)即使服务重启,消息不丢失(需配置持久化队列+持久化消息)。 -
**顺序保证:**单队列内遵循 FIFO(先进先出)优先级队列支持按权重处理(如 VIP 订单优先)。
-
**负载均衡:**多个消费者并发消费同一队列自动分配消息,最大化资源利用率。
三、队列管理
1.队列和交换机一样也会属于某个交换机。
2.队列的类型(Classic是最常用的队列),不同类型的队列具有不同的属性。
3.队列的名字。
4.是否持久化(Durability代表持久化,重启以后还在)。
5.是否自动删除,当最后一个消费者断开连接时,队列将被自动删除。
其中第四和第五两个组合到一起可以使用,加上我们后面讲的内存节点,就可以适合哪些临时对性能要求比较高的应用。
当然下面还有一堆参数可以对这个队列进行额外附加功能,部分参数将在后面的部分章节进行讲解。
我们已经完成了虚拟主机,交换机,队列的创建,交换机是属于某个虚拟主机,队列也属于某个虚拟主机,但是他们之前还没有办法产生交集,还是平行的两条线,类似下图这样。也是我们下个小节要讲解的内容。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。