RabbitMQ

注意:括号中为八股在每次面试中出现的概率

RabbitMQ特点?(592/1759=33.7%)

RabbitMQ 是一种基于 AMQP(高级消息队列协议)的开源消息中间件,广泛应用于分布式系统中的异步通信和削峰解耦。RabbitMQ 的核心设计基于生产者-消费者模型,通过消息队列实现消息的传递和处理。接下来我将详细讲述RabbitMQ 的八个特点

第一是高可靠性,支持消息持久化、消息确认机制和事务机制,确保消息不会丢失。

第二是路由机制较为灵活,通过交换机和绑定规则,支持多种消息分发模式(如直连、广播、主题等)。

第三是高可用性,支持集群部署和镜像队列,提升系统的容灾能力。

第四是扩展性强,能够轻松应对高并发场景,并支持插件扩展功能。

第五是支持多种协议,RabbitMQ兼容AMQP、STOMP、MQTT等多种消息协议,便于与不同系统集成。

第六是支持多语言客户端库,提供Java、Python、.NET等多语言的客户端库,方便开发者使用。

第七是自带Web管理界面,方便监控和管理服务器状态及操作。

第八是插件丰富,支持安装各种插件,扩展功能如消息追踪、性能监控等。

如何记忆:

1.口诀记忆

口诀:

RabbitMQ 特点记心中,

可靠路由高可用,扩展协议多语言。

Web管理插件强,功能全面不迷茫。

解析:

第一句“可靠路由高可用”概括了高可靠性、灵活路由机制和高可用性。

第二句“扩展协议多语言”涵盖了扩展性强、支持多种协议和多语言客户端库。

第三句“Web管理插件强”强调自带 Web 管理界面和丰富的插件功能。

2.联想记忆

场景:

想象 RabbitMQ 是一个“快递公司”

解析:

高可靠性 :快递员会确保包裹送到,并且有签收确认(消息持久化和确认机制)。

灵活路由机制 :快递可以根据地址规则分发到不同地方(交换机和绑定规则)。

高可用性 :快递公司有多个分部,即使一个分部出问题,其他分部也能接单(集群部署和镜像队列)。

扩展性强 :快递公司可以随时增加车辆和员工应对高峰期(高并发场景和插件扩展)。

支持多种协议 :快递公司能处理不同类型的包裹(兼容 AMQP、STOMP、MQTT 等协议)。

多语言客户端库 :快递公司提供多语言客服热线(Java、Python、.NET 等客户端库)。

Web 管理界面 :快递公司有一个在线平台,方便客户查看订单状态(监控和管理服务器)。

插件丰富 :快递公司提供增值服务,如包裹追踪和性能优化(消息追踪和性能监控)。

拓展:

1.RabbitMQ的整体模型

上图展示了RabbitMQ的消息传递架构。下面是对相关概念的介绍:

(1)Producer(生产者)

定义:生产者是发布消息的应用程序。它将消息发送到消息队列中,并指定要发送的消息内容和相关的路由信息。生产者不关心消息的具体去向,它仅仅是将消息传递给交换器。

作用:生产者的主要作用是生成消息并将消息推送到RabbitMQ中。在我们的图示中,Producer1 和 Producer2 会将消息发送到各自的交换器(Exchange1 和 Exchange2)。这些消息会被传递到消息队列(如 Queue1 或 Queue2),由消费者进行消费。

(2)Consumer(消费者)

定义:消费者是从消息队列中获取消息并进行处理的应用程序或服务。消费者订阅队列,并从队列中取出消息进行消费。

作用:消费者从队列中提取消息并根据消息内容执行相应的处理。多个消费者可以并行消费队列中的消息,RabbitMQ 会将消息分配给空闲的消费者。上图中,Consumer1、Consumer2 和 Consumer3 就是从 Queue1 和 Queue2 中消费消息的客户端。每个消费者通常会有一定的逻辑来处理接收到的消息,例如数据处理、业务逻辑计算或调用其他服务。

(3)Exchange(交换器)

定义:Exchange 是 RabbitMQ 的核心组件,它负责接收生产者发送的消息,并根据一定的规则将消息路由到不同的队列中。交换器不保存消息,只是负责将消息转发到相应的队列。

作用:生产者将消息发送到交换器,交换器再根据消息的路由规则将消息推送到一个或多个队列。交换器的类型决定了它如何处理这些消息。上图中的 Exchange1 和 Exchange2 接收来自生产者的消息并根据不同的类型将它们分发到队列中。

(4)Exchange 的绑定(Binding)

Exchange 路由消息的过程与队列的绑定方式密切相关。交换器通过 Binding(绑定) 将队列与自己关联起来。绑定是 Exchange 与队列之间的连接,通常会有一个路由键来指定绑定的规则。

直接绑定:Direct Exchange 会通过路由键直接将消息发送到与该路由键匹配的队列。

模式匹配绑定:Topic Exchange 允许使用通配符进行模式匹配绑定,基于消息的路由键来决定队列是否接收消息。

(5)Exchange Types(交换器类型)

RabbitMQ 提供了多种交换器类型,下面是每种类型的详细说明:

Direct Exchange(直接交换器):直接交换器将消息路由到与其路由键完全匹配的队列。适用于生产者和消费者之间需要进行精准匹配的场景。比如,我们可以使用路由键 email 来将发送电子邮件的消息直接路由到专门处理电子邮件的队列中。每个队列都会与交换器绑定,并指定一个路由键。当生产者发布消息时,交换器会根据消息中的路由键将消息推送到与该路由键匹配的队列。

Fanout Exchange(扇形交换器):扇形交换器将收到的消息广播到所有与其绑定的队列,而不管消息中的路由键是什么。适用于广播消息的场景,比如一个通知系统,消息需要传递给多个消费者,所有消费者都能收到消息。无论消息的路由键是什么,所有绑定到该扇形交换器的队列都会收到该消息。

Topic Exchange(主题交换器):主题交换器根据路由键的模式将消息路由到多个队列。路由键支持通配符 *(匹配单个词)和 #(匹配多个词)。适用于复杂的消息路由场景,例如不同类型的日志信息需要发送到不同的消费者,消费者根据感兴趣的主题进行选择。生产者将消息发送到交换器并指定一个路由键,交换器通过匹配路由键的模式将消息转发到与之匹配的队列。

Headers Exchange(头交换器):头交换器根据消息的头部属性进行路由,而不仅仅依赖路由键。适用于需要根据消息的多个属性进行过滤和路由的场景,比如发送消息时附带多个属性,如消息的类型、来源等。消息发送到交换器时,交换器会根据消息头部的属性来决定将消息路由到哪个队列。

(6)Queue(消息队列)

定义:消息队列是用于存储消息的容器,消息队列在 RabbitMQ 中充当了缓冲区的角色,消息会在队列中排队等待消费者进行处理。每个队列可以同时有多个生产者向其发送消息,也可以有多个消费者来消费消息。

作用:队列的作用是暂时存储消息,并确保消息不会丢失,直到它们被消费者取走。队列确保消息按照先进先出的顺序进行消费,除非使用了其他特殊的路由和策略。上图中的 Queue1 和 Queue2 是两个队列,分别接收来自不同交换器的消息。

(7)Broker(消息中间件的服务节点)

定义:Broker 是指 RabbitMQ 消息队列服务的核心组件,负责管理消息的发送、接收、路由等工作。它协调消息的流动,并处理生产者和消费者之间的通信。

作用:Broker 是 RabbitMQ 系统的“中介”,它接收来自生产者的消息,决定如何将消息路由到队列,并最终确保消费者能够收到这些消息。Broker 的责任还包括管理交换器、队列的配置和消息的持久化(如果启用了持久化)。

RabbitMQ 如何保证消息不丢失?(491/1759=27.9%)

为了确保消息在传输过程中不丢失,RabbitMQ 提供了一系列机制来保障消息的可靠传递。接下来我会从生产者到 RabbitMQ、RabbitMQ 自身、以及 RabbitMQ 到消费者的三个阶段详细讲述如何实现消息不丢失。

第一个是的阶段,RabbitMQ 提

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

【神品八股】1759篇面经精华 文章被收录于专栏

神哥引路,稳稳起步!!早鸟特惠,仅剩177名额!晚了就涨到29.9了! 核心亮点: 1.数据驱动,精准高频:基于1759篇面经、24139道八股题,精准提炼真实高频八股。 2.科学记忆,高效掌握:融合科学记忆法和面试表达技巧,记得住,说得出。 3.提升思维,掌握财商:不仅可学习八股,更可教你变现,3个月赚不回购买价,全额退。 适宜人群: 在校生、社招求职者及自学者。

全部评论
还是建议后期能继续加点题更新到150道左右,那就直接封神了😎
2 回复 分享
发布于 03-03 15:43 安徽
神哥后边还有几个专栏😍
2 回复 分享
发布于 03-01 22:25 山东
神哥,催更计网和操作系统😤
2 回复 分享
发布于 03-01 13:25 北京
感觉可以加上一个高可用
1 回复 分享
发布于 03-28 10:33 广东
神哥,是总共只有这三道题吗,建议多更点,太精彩了没看够,哈哈哈😉
1 回复 分享
发布于 03-16 00:22 贵州
神哥有没有kafka
1 回复 分享
发布于 03-10 09:43 上海
催更 计网os +1
1 回复 分享
发布于 03-03 16:47 上海
神哥考不考虑出一些常见的手撕🤤
1 回复 分享
发布于 03-01 23:25 广东

相关推荐

一面时间10.29面试了50min,但面试过程中网络经常出问题1、自我介绍2、你觉得大数据专业和计算机科学等专业有啥差异?3、你觉得哪门你的印象比较深刻、对你的影响比较大?4、你觉得大数据和传统数据库的主要区别在哪?5、你觉得事务是什么意思?举个例子6、你觉得整个事务是单纯数据库就可以完成的吗?7、事务能够解决怎样的问题?为啥需要事务——》什么情况下会出现幻读、脏读——》为什么大家不能一个一个读呢?——》并发8、大数据中有并发这种东西吗——》(有时候解决一个问题是靠技术解决,有时是靠一个规范,有的是使用模式)——》数仓怎么解决这个问题?——》(面试官)从技术层面上来讲早期HDFS是有这个问题的,并行写是有问题的,但这个问题是可以忍受的,一是因为不太用的到并发,实际数仓建设中一个表里在一定时间基本只有一个东西在往里写(delete,insert),二是因为出了点问题是可以接受的,早期谷歌大数据搜索,现在记录日志,很少有数仓一边写一边读9、大数据在分布式上的作用是啥,从存储、计算的层面来讲哪些比较有特点——》你觉得100台1G的服务器比较贵还是1台100G的服务器比较贵——》(面试官)100台服务器一直都是比较贵,电力、散热等,但不怎么容易坏——》Yarn解决的啥问题——》啥是计算资源——》讲讲Spark的计算这块介绍一下10、场景:你到现场,没有任何数据平台,给一份文件(数据量极大,以京东白条这种为例),第一列是时间,第二列是用户人名,第三列是消费金额,我现在要做个排序,找出单日消费前10的人,服务器上性能较一般,但啥语言工具都有,你会怎么解决?——》你觉得并行和并发有什么区别——》(面试官)一个大数据任务本质上处理方法是一样的,无非节点多就并行做,节点少就串行做,节点不多不少就整体并行,每个并行里是串行。11、聊聊你的离线数仓——》为什么企业要建数仓?——》数仓分层的依据——》ODS的中文是啥(回答错了)——》如果ODS和数仓只能留一个,你准备留哪个?(回答错,实际是保留ODS)——》你既然回答的理直气壮,那你觉得ODS为什么还留着,为什么没被干掉?(面试官跳过了)12、你觉得数仓几个层要被干掉一个,你觉得哪个层要被合并——》DWS(?)13、你对维度建模理论有了解吗?——》你觉得维度建模理论提出是为了解决啥问题,为什么要搞维度表,事实表,为什么不搞个宽表,2、300个字段堆那?——》你觉得实际工作中宽表用的多不多——》(面试官原话)所以你觉得维度建模理论是扯淡吗(笑)——》你觉得谁喜欢宽表?——》(面试官)政府部门的人相当喜欢宽表,实际工作环境中,不查数据,一般都是要求下载为excel,他只关心本部门的数据,那个数据没有那么多,他也不会写SQL,就要求你整到一起下载到excel让他去操作。(面试官)为什么这些理论和实际差别很大呢——》早期数仓很贵ODS最大的价值——》万一领导马上就要数据,数仓来不及跑,可以直接从ODS拿,像泄洪闸一样的方便的东西,另外一般参与ODS建设的人的资历比较老,ODS可以减小,但不能被干掉。面试官建议:你的逻辑能力、学习能力都不错,再找个方向去积累,数仓有些没那么牛,但可以做很久。
第一次找实习,我建议__
点赞 评论 收藏
分享
评论
14
39
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务