作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:
Web服务器
代理服务器
ZooKeeper
Kafka
RabbitMQ(本章节)
本章的介绍的RabbitMQ和我们上个章节介绍的Kafka在一定程度上相似的功能,如果不是面试八股文,一般不需要去单独记录,当我们熟悉它主流的功能以后,我们就会在架构设计的时候把他们放置在不同的位置。
一、RabbitMQ 是什么
RabbitMQ 是一个开源的消息代理(Message Broker)软件,基于 AMQP(Advanced Message Queuing Protocol)协议实现,用于在分布式系统中实现高效、可靠的消息传递。它由 Erlang 语言编写,以高并发、高可靠性和可扩展性著称,广泛应用于微服务架构、异步任务处理、应用解耦等场景。具备下面的核心功能。
-
异步通信:允许应用程序通过消息队列解耦,生产者发送消息后无需等待消费者处理。
-
消息路由:通过灵活的交换器(Exchange)机制,支持多种消息分发模式。
-
可靠性保障:提供消息持久化、确认机制(ACK)和重试策略,确保消息不丢失。
-
负载均衡:通过轮询或权重分配方式将消息分发给多个消费者,提升系统吞吐量。
二、为什么需要消息队列
在分布式系统中,直接调用(如 HTTP 请求)可能导致以下问题:
-
耦合性高:服务之间依赖性强,一个服务故障可能引发雪崩效应。
-
性能瓶颈:同步调用会阻塞线程,影响系统响应速度。
-
扩展困难:高并发场景下难以动态调整消费者数量。
消息队列通过异步通信和缓冲机制解决了这些问题:生产者发送消息到队列后即可返回,消费者按自身能力处理消息。即使消费者暂时不可用,消息仍能存储在队列中,避免数据丢失。
三、RabbitMQ 核心概念
1. 生产者(Producer):发送消息的应用程序。生产者将消息发布到交换器(Exchange),而非直接发送到队列。
2. 消费者(Consumer):接收并处理消息的应用程序。消费者从队列中获取消息并进行业务处理。
3. 队列(Queue):存储消息的缓冲区。队列是消息的最终目的地,消费者从队列中订阅消息。
4. 交换器(Exchange):接收生产者发送的消息,并根据绑定规则(Binding)将消息路由到队列。常见的交换器类型:
-
Direct Exchange:根据路由键(Routing Key)精确匹配队列。
-
Topic Exchange:支持通配符模式匹配路由键。
-
Fanout Exchange:广播消息到所有绑定的队列。
-
Headers Exchange:根据消息头属性路由。
5. 绑定(Binding):定义交换器和队列之间的关系,指定路由规则(如路由键)。
6. 虚拟主机(Virtual Host):逻辑上的隔离单元,类似于命名空间。不同虚拟主机的队列、交换器相互独立。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。