面试跳槽季惊艳面试官的回答:谈谈你对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
相关文章
|
1月前
|
消息中间件 存储 缓存
大厂面试高频:Kafka 工作原理 ( 详细图解 )
本文详细解析了 Kafka 的核心架构和实现原理,消息中间件是亿级互联网架构的基石,大厂面试高频,非常重要,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka 工作原理 ( 详细图解 )
|
5天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1月前
|
消息中间件 存储 Kafka
RocketMQ 工作原理图解,看这篇就够了!
本文详细解析了 RocketMQ 的核心架构、消息领域模型、关键特性和应用场景,帮助深入理解消息中间件的工作原理。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
RocketMQ 工作原理图解,看这篇就够了!
|
1月前
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 安全 Java
面试高频:Synchronized 原理,建议收藏备用 !
本文详解Synchronized原理,包括其作用、使用方式、底层实现及锁升级机制。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
面试高频:Synchronized 原理,建议收藏备用 !
|
2月前
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
2月前
|
存储 监控 算法
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程 ?
尼恩提示: G1垃圾回收 原理非常重要, 是面试的重点, 大家一定要好好掌握
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程  ?
|
2月前
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
1月前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
下一篇
DataWorks