rabbitmq 面试题

2023-09-15 09:07:58

1.交换机类型

RabbitMQ是一个开源的消息队列系统,它支持多种交换机类型,用于在消息的生产者和消费者之间路由和分发消息

  1. Direct Exchange(直接交换机):Direct交换机是最简单的交换机类型之一。它将消息按照消息的Routing Key(路由键)与绑定的队列的Routing Key进行精确匹配,并将消息发送到匹配的队列。这种交换机类型适合于一对一的消息传递。

  2. Fanout Exchange(广播交换机):Fanout交换机将消息广播到绑定到它的所有队列,忽略消息的Routing Key。这种交换机类型适合于一对多的消息广播,不考虑消息的内容。

  3. Topic Exchange(主题交换机):Topic交换机根据消息的Routing Key与绑定的队列的Routing Key之间的通配符匹配规则,将消息发送到一个或多个队列。这允许更复杂的消息路由和过滤。

2.为什么使用rabbitmq,使用它有什么好处?

RabbitMQ 是一个流行的消息队列中间件,用于在分布式系统中进行消息传递。

1. 解耦(Decoupling):
   解耦是指将系统的各个组件或模块之间的依赖降低到最低程度。在消息队列中,解耦意味着生产者(消息发送者)和消费者(消息接收者)之间的通信不需要直接依赖于对方的状态或可用性。生产者只需要将消息发送到队列,而消费者则从队列中获取并处理消息。这种解耦方式允许系统的各个部分独立运作,不会因为某个组件的故障而影响其他组件。

2. 异步(Asynchronous):
   异步是指不需要立即等待某个操作的完成,而可以继续执行其他操作。在 RabbitMQ 中,生产者可以异步地将消息发送到队列,而消费者可以异步地从队列中获取消息并进行处理。这意味着生产者和消费者之间的交互是非阻塞的,系统可以高效地处理大量的消息,而不会因为等待某个操作完成而陷入停滞。

3. 削峰(Load Leveling):
   削峰是指在系统中平滑处理突发的高负载,而不会导致系统崩溃或性能下降。在 RabbitMQ 中,削峰通常是通过队列来实现的。当系统的吞吐量超过了某个组件的处理能力时,消息会积压在队列中,等待消费者逐一处理。这种方式可以帮助系统处理高峰时期的流量,而不会造成资源瓶颈。

总结起来,RabbitMQ 中的解耦异步削峰是一种设计理念,通过消息队列实现了组件之间的解耦,允许异步通信,同时使用队列来削峰,确保系统在高负载情况下稳定运行。这种方式有助于构建可扩展、可靠的分布式系统,提高系统的性能和可维护性。

3.如何保证消息不丢失的?

死信队列(Dead Letter Queue): 死信队列用于存储无法被成功处理的消息。当消息无法被消费者处理时,可以将其移动到死信队列,以便进一步的排查和处理。

1. 消息被拒绝访问,即 RabbitMQ返回 basicNack 的信号时。 或者拒绝basicReject

2. 消费者发生异常,超过重试次数 。

3. 消息的 TTL 过期时长或队列过期时间

4. 消息队列达到最大长度

4.如何保证消息的正确发送,如何确定接收?

确保消息的正确发送:

  1. 消息持久化:在发送消息时,将消息标记为持久化,这样即使消息代理(如RabbitMQ)在消息发送后宕机,消息也不会丢失。

  2. 事务:使用事务来确保消息的原子性。在消息发送和确认接收之间,可以将一系列操作包装在事务中。如果事务成功提交,则消息发送,否则它将被回滚。

  3. 发送确认:大多数消息队列系统(包括RabbitMQ)支持生产者端的确认机制。在消息成功发送到队列后,生产者将获得一个确认,以指示消息已经被接收并可靠保存。

  4. 错误处理:处理可能发生的错误情况,如连接断开、消息队列服务不可用等。可以实现重试机制,以确保消息最终被正确发送。

确定消息的正确接收:

  1. 消息确认:使用消息队列的确认机制来确保消息已被消费者接收。在RabbitMQ中,消费者可以向消息代理发送确认,以告知代理消息已被处理。这种机制确保消息不会被多次处理。

  2. 消费者健壮性:编写健壮的消费者代码,以处理可能的异常情况,如处理失败后的消息重新入队列或记录错误信息。

  3. 消息幂等性:设计消息处理逻辑,以确保多次处理相同消息不会导致不一致的结果。这可以通过消息的唯一标识符或其他方法来实现。

  4. 监控和日志:实施监控和日志记录,以跟踪消息的处理过程。这有助于排除故障和分析问题。

  5. 消息超时:在消息中包含时间戳或超时信息,以确保及时处理消息。如果消息处理时间过长,可以将其标记为超时并采取适当的措施。

  6. 消息重试:在处理失败后,可以将消息重新放入队列以进行重试。您可以设置最大重试次数和重试间隔,以避免无限制的重试。

  7. 监控队列状态:监控消息队列的状态,以检测任何异常情况。您可以使用队列的监控工具或API来实时监视队列的健康状况。

综上所述,通过正确配置消息队列系统,并采取适当的消息发送和接收策略,可以确保消息的可靠发送和正确接收。这对于构建可靠的分布式系统和微服务架构至关重要。

更多推荐

【SpringMVC】JSON数据传输与异常处理的使用

文章目录一、Jackson1.1Jackson是什么1.2常用注解1.3实例1.3.1导入依赖1.3.2配置spring-mvc.xml1.3.3JsonController.java二、SpringMVC异常处理机制2.1使用原因2.2SpringMVC异常处理2.2.1异常处理机制流程图2.2.2异常处理的三种方式

基于SpringBoot的超市管理系统

基于SpringBoot+Vue的超市管理系统、超市进销存系统,前后端分离开发语言:Java数据库:MySQL技术:SpringBoot、Vue、MybaitsPlus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven【主要功能】角色:管理员、员工管理员:个人信息管理、员工管理、客户管理、供

数据结构之时间复杂度&&空间复杂度的计算

数据结构:计算机如何存储数据的问题。DS关心的是如何高效的进行数据的读写。算法:在特定的数据集上(不关心怎么进行具体数据的读写),如何利用数据完成特定的功能。算法本质上就是一系列运算的先后集合。那么,如何评价一个算法的好坏?从两种维度进行:时间效率与空间效率时间复杂度:主要衡量一个算法的运行速度(不是实际计算机的运行速

Java实现单链表

目录一.单链表二.单链表基本操作的实现1.单链表类、属性的定义2.求链表长度3.链表是否包含值为key的节点4.添加元素5.删除节点6.清空链表三、完整代码一.单链表链表是一种在物理存储结构上非连续的存储结构,数据元素的逻辑顺序通过链表中的引用链接次序实现。链表的结构多样,我们通过实现无头单向非循环链表,来进一步理解链

【记录成长】大学时光已过半, 分享我的大二暑期实习经历

你好,我是cpt,本文章记录我大二暑期找实习的过程,以及工作中的点点滴滴,还有一些经验分享,希望能够帮助到你。实习投递(BOSS1k沟通10+面)投递我是2023.6.16才开始投递的当时真的很晚了基本很少hc而且小公司基本不要大二学生下面这两篇短文是当时面试遇到的问题25三本鼠鼠投500面试0难QAQ_牛客网请问各位

Opengl绘制三角形

节点对象学习:顶点数组对象:VertexArrayObject,VAO顶点缓冲对象:VertexBufferObject,VBO:表示存储在GPU显存中的大量顶点数据。我们可以通过这个对象,一次性向GPU发送大量的数据,而不是一次次地从CPU中发送数据到GPU,这是个很慢的过程。元素缓冲对象:ElementBuffer

三步实现Mybatis(Mybatis-Plus)多数据源配置

前言要实现多数据源可以采用dynamic-datasource或者mybatis-mate,本文就以dynamic-datasource为例dynamic-datasource简介springboot快速集成多数据源的启动器使用文档(opensnewwindow)支持数据源分组,适用于多种场景纯粹多库读写分离一主多从混

SpringBoot实战案例:图书管理系统

SpringBoot实战案例:图书管理系统在本文中,我们将介绍如何使用SpringBoot框架构建一个简单的图书管理系统。我们将从零开始,逐步完成系统的搭建。本文将分为以下七个部分:系统需求分析搭建项目框架实现数据访问层实现业务逻辑层实现控制层前端页面与交互测试与部署1.系统需求分析在开始构建图书管理系统之前,我们首先

SpringBoot-接口幂等性

幂等幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。尤其是支付、订单等与金钱挂钩的服务,保证接口幂等性尤其重要。在实际开发中,我们需要针对不同的业务场景我们需要灵活的选

spring framework 5.2文档 - 控制反转 IoC 容器

IoC主题1.容器概述2.bean概述3.依赖注入(DI)4.Bean的范围5.定制一个beanSpring框架最重要的是控制反转(IoC)容器1.容器概述org.springframework.context.ApplicationContext接口代表SpringIoC容器,负责实例化、配置和组装bean。容器通过

竹云董事长董宁受邀出席香港第三届湾区元宇宙大会暨AIGC、RWA发展高峰论坛并作主题演讲

“一元初分,宇宙万仪”。9月16日,第三届湾区元宇宙大会暨AIGC、RWA发展高峰论坛在香港圆满落幕。全球权威机构、顶级专家学者、杰出企业家代表齐聚一堂,畅所欲言,全面总结分析元宇宙现状,综合研判元宇宙未来发展趋势。大会由香港区块链技术应用协会主办,粤港澳大湾区青年总会、香港国际投资总会、国际数据协会、联合国数字安全联

热文推荐