面试跳槽季惊艳面试官的回答:谈谈你对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版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
6天前
|
安全 Java 数据库
一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这篇文章是关于Java面试题的笔记,涵盖了线程池复用原理、Spring框架基础、AOP和IOC概念、Bean生命周期和作用域、单例Bean的线程安全性、Spring中使用的设计模式、以及Spring事务的实现方式和隔离级别等知识点。
|
4天前
|
消息中间件 存储 数据库
深入学习RocketMQ的底层存储设计原理
文章深入探讨了RocketMQ的底层存储设计原理,分析了其如何通过将数据和索引映射到内存、异步刷新磁盘以及消息内容的混合存储来实现高性能的读写操作,从而保证了RocketMQ作为一款低延迟消息队列的读写性能。
|
4天前
|
消息中间件 负载均衡 API
RocketMQ生产者负载均衡(轮询机制)核心原理
文章深入分析了RocketMQ生产者的负载均衡机制,特别是轮询机制的实现原理,揭示了如何通过`ThreadLocal`技术和消息队列的选播策略来确保消息在多个队列之间均衡发送,以及如何通过灵活的API支持自定义负载均衡策略。
|
4天前
|
消息中间件 存储 负载均衡
RocketMQ消费者消费消息核心原理(含长轮询机制)
这篇文章深入探讨了Apache RocketMQ消息队列中消费者消费消息的核心原理,特别是长轮询机制。文章从消费者和Broker的交互流程出发,详细分析了Push和Pull两种消费模式的内部实现,以及它们是如何通过长轮询机制来优化消息消费的效率。文章还对RocketMQ的消费者启动流程、消息拉取请求的发起、Broker端处理消息拉取请求的流程进行了深入的源码分析,并总结了RocketMQ在设计上的优点,如单一职责化和线程池的使用等。
RocketMQ消费者消费消息核心原理(含长轮询机制)
|
4天前
|
消息中间件 存储 RocketMQ
2分钟看懂RocketMQ延迟消息核心原理
本文从源码层面解析了RocketMQ延迟消息的实现原理,包括延迟消息的使用、Broker端处理机制以及定时任务对延迟消息的处理流程。
2分钟看懂RocketMQ延迟消息核心原理
|
4天前
|
消息中间件 存储 缓存
RocketMQ发送消息原理(含事务消息)
本文深入探讨了RocketMQ发送消息的原理,包括生产者端的发送流程、Broker端接收和处理消息的流程,以及事务消息的特殊处理机制,提供了对RocketMQ消息发送机制全面的理解。
RocketMQ发送消息原理(含事务消息)
|
4天前
|
消息中间件 缓存 负载均衡
复盘女朋友面试4个月的RocketMQ面试题
这篇文章复盘了面试中关于RocketMQ的高频题目,包括架构组成、使用姿势、功能原理及高级特性,并强调了理解这些实现机制对于面试成功的重要性。
复盘女朋友面试4个月的RocketMQ面试题
|
11天前
|
消息中间件 算法 前端开发
京东面试:说说CMS工作原理?
京东面试:说说CMS工作原理?
27 2
|
26天前
|
消息中间件 存储 Kafka
MetaQ/RocketMQ 原理问题之RocketMQ DLedger融合模式的问题如何解决
MetaQ/RocketMQ 原理问题之RocketMQ DLedger融合模式的问题如何解决