面试跳槽季惊艳面试官的回答:谈谈你对RabbitMQ工作原理的理解?

简介: 一个5年工作经验的小伙伴,在面试的时候被这样一个问题。谈谈你对RabbitMQ架构原理的理解。当时,这位小伙伴只解答说,我只会用,原理并没有关注过。那今天我给大家来分享一下我的理解。

一个5年工作经验的小伙伴,在面试的时候被这样一个问题。谈谈你对RabbitMQ架构原理的理解。当时,这位小伙伴只解答说,我只会用,原理并没有关注过。那今天我给大家来分享一下我的理解。

另外,我花了1个多星期,准备了一份500页的PDF面试题解析配套文档,想获取的小伙伴可以扫描文章底部二维码免费领取!

(附赠10万字大厂内部面试资料!)

1、核心组件

要回答这个问题呢,首先要知道RabbitMQ架构中几个核心组件,

8bb72f9694076a1e27557da1ba390bf9.jpg

它们分别是Product、Cunsumer、Broker、Connection、Channel、Queue、Exchange、Binding、VHost。

2、工作原理

那么,这些组件之间是如何协调工作的呢?下面来看这么一个动画:

e60058c0a40688c5c7bf714156e223b7.jpg

首先是,第1个和第2个,Product和Consumer分别是消息的生产者和消息的消费者,这是所有的消息中间件都有两个角色,我就不做过多介绍了。

df966d53c2cc831a7a524eba7a6d18ad.jpg

重点来看,第3个叫Broker,中文翻译过来叫做代理或者中介,我可以把Broker理解为就是安装RabbitMQ的服务器,就像是一栋用来存储和转发消息的房子。

0bf69d9f117927b28c0faa3016ba7656.jpg

第4个就是,Connection连接。无论是生产者发送消息,还是消费者接收消息,都必须要跟Broker之间建立一个连接,那Connection呢就相当于是一个TCP的长连接

cc660c9cc4d2ea1bcf5c23442e1ee560.jpg

第5个Channel通道。如果所有的生产者发送消息和消费者接收消息,每次都创建和释放TCP长连接的话,对于Broker来说肯定会造成很大的性能损耗,也会浪费时间。

所以在AMQP协议里面引入了Channel的概念,它相当于是一个虚拟的连接。这样我们就可以在已经连接好的TCP长连接里面去创建和释放Channel,大大了减少了资源消耗。

不同的Channel是相互隔离的,每个Channel都有自己的编号。对于每个客户端线程来说,Channel就没必要共享了,各自用自己的Channel。

另外一个需要注意的是,Channel是RabbitMQ原生API里面的最重要的编程接口,也就是说我们定义交换机、队列、绑定关系,发送消息,消费消息,调用的都是Channel接口上的方法。

c166c3b16a974a1c0a861f59b515ddfa.jpg

第6个,Queue队列。它专门用来存储消息,Queue也是生产者和消费者的纽带,生产者发送的消息会存储到队列中,而消费者也是从队列中来消费消息。

0b61c3c5c2145f2def7aa0e1ea31b98d.jpg

第7个,就是Exchange交换机。相当于消息的路由器。Exchange不会存储消息,它只做一件事情,根据规则分发消息。

62c6477b7c66bc64318d26e5b402b310.jpg

第8个,就是Binding绑定。Exchange和存储消息的队列必须建立一个绑定关系,并且为每个队列指定一个特殊的标识。

Exchange和队列是多对多的绑定关系,也就说,一个交换机的消息一个路由给多个队列,一个队列也可以接收来自多个交换机的消息。

绑定关系建立好之后,生产者发送消息到Exchange,也会携带一个特殊的标识。当这个标识跟绑定的标识匹配的时候,消息就会发给一个或者多个符合规则的队列。

325581e7b244ee9cc5b2272cb5bb34fe.jpg

最后一个就是Vhost,全称叫Virtual Host虚拟机。为了解决不同业务系统之间的消息隔离,节约硬件成本,我们可以利用RabbitMQ的Vhost来实现资源的隔离和权限的控制。它的功能和其他编程语言中的NameSpace比较类似。

以上就是我对RabiitMQ的架构原理的理解,,小伙伴们,你是不是也理解得更加透彻了呢?

最后,我把之前分享的视频全部整理成了文字,想获取的小伙伴可以扫描文章底部二维码拿!希望能够以此来提高各位粉丝的通过率。

ee90d9963df444db88b33d6e798a5b94.gif

我是被编程耽误的文艺Tom,只弹干货不掺水!你们的支持就是我最大的动力!关注我,面试不再难!

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
4天前
|
消息中间件 存储 监控
|
4天前
|
中间件 数据库连接 API
Python面试:FastAPI框架原理与实战
【4月更文挑战第18天】FastAPI是受欢迎的高性能Python Web框架,以其简洁的API设计、强大的类型提示和优秀的文档生成能力著称。本文将探讨FastAPI面试中的常见问题,包括路由、响应对象、Pydantic模型、数据库操作、中间件和错误处理。同时,还会指出一些易错点,如类型提示不准确、依赖注入误解,并提供实战代码示例。通过理解和实践FastAPI,可以在面试中展示出色的Web开发技能。
30 1
|
4天前
|
消息中间件 分布式计算 监控
Python面试:消息队列(RabbitMQ、Kafka)基础知识与应用
【4月更文挑战第18天】本文探讨了Python面试中RabbitMQ与Kafka的常见问题和易错点,包括两者的基础概念、特性对比、Python客户端使用、消息队列应用场景及消息可靠性保证。重点讲解了消息丢失与重复的避免策略,并提供了实战代码示例,帮助读者提升在分布式系统中使用消息队列的能力。
42 2
|
3天前
|
Android开发 移动开发 小程序
binder机制原理面试,安卓app开发教程
binder机制原理面试,安卓app开发教程
binder机制原理面试,安卓app开发教程
|
4天前
|
算法 网络协议 安全
HTTP 原理和面试题
HTTP 原理和面试题
|
2天前
|
前端开发 算法
【css炫酷动画】让面试官眼前一亮的故障风格文字动画,3年Web前端开发工程师面试经验分享
【css炫酷动画】让面试官眼前一亮的故障风格文字动画,3年Web前端开发工程师面试经验分享
|
2天前
|
Android开发 异构计算 前端开发
Android显示原理,安卓自定义view面试
Android显示原理,安卓自定义view面试
|
3天前
|
设计模式 前端开发 网络协议
Android 开发网易面试凉凉经,面试官:基础不牢,彻底帮你搞懂
Android 开发网易面试凉凉经,面试官:基础不牢,彻底帮你搞懂
|
3天前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
|
3天前
|
Java 数据库连接 Spring
K8S+Docker理论与实践深度集成java面试jvm原理
K8S+Docker理论与实践深度集成java面试jvm原理

热门文章

最新文章

http://www.vxiaotou.com